iOS HTTP Request - POST

這東西不管是作網站或者網路服務都超給他重要的

/****************************************************************************************/
//會員與新會員統計
//宣告一個 NSMutableURLRequest 並給予一個記憶體空間
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
//宣告一個 NSURL 並給予記憶體空間、連線位置
NSURL *connection = [[NSURL alloc] initWithString:@"http://XXX.XXX.XXX.XX/XXXXXXX.php"];
//宣告要post的值
NSString *httpBodyString=[NSString stringWithFormat:@"XXX=%@&XXX=%@&XXX=%@", YYY, YYY, YYY];
//NSLog(@"httpBodyString = %@",httpBodyString);
//設定連線位置
[request setURL:connection];
//設定連線方式
[request setHTTPMethod:@"POST"];
//將編碼改為UTF8
[request setHTTPBody:[httpBodyString dataUsingEncoding:NSUTF8StringEncoding]];

//轉換為NSData傳送
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//看request出來的值
NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
/****************************************************************************************/


NSURL *connection = [[NSURL alloc] initWithString:@"http://XXX.XXX.XXX.XX/XXXXXXX.php"];
再這裡用php作代表
但會因為使用的server語言而變 ex.asp、aspx、php、jsp.......等
XXXXX的部份就是你的url

NSString *httpBodyString=[NSString stringWithFormat:@"XXX=%@&XXX=%@&XXX=%@", YYY, YYY, YYY];
XXX所代表就是在server端要接收的變數名稱
YYY就是要丟進去的值
記得每一筆都要給他用&分開

相關連結
iOS Library
iOS Library - NSMutableURLRequest Class Reference
iOS Library - NSURL Class Reference
iOS Library - NSData Class Reference
iOS Library - NSString Class Reference

Objective C - String

真的用太多了...不過用了很多還是記不住XD
腦容量大概2k吧我....

============== 字串搜尋 ================
比對字串內容 - string2 去比對 string1內容
NSString *string1 = @"我是個大笨蛋";
NSString *string2 = @"笨蛋";
NSRange range = [string1 rangeOfString:string2];

//print出來
NSLog(@"位置:%d || 字串相同長度:%d", range.location, range.length);


NSRange range = [字串 rangeOfString:字串];
range.location 為所在位置
range.length 為字串相同長度

由以上的code可以得到一長串的句子中哪幾個字是你要的
是從哪一個字元開始,長度為何

※如果一串字中有好幾個重複的字 ex:我是個超級大笨蛋笨蛋笨蛋
他只會找到地一個笨蛋


============== 字串比對 ================
比對兩個字串是否相同
NSString *myString = @"我是個大笨蛋";
NSString *string1 = @"無敵大笨蛋";
NSString *string2 = @"我是個大笨蛋";

//結果為false / NO
if( [myString isEqualToString:string1 ] )

//結果為true / YES
if( [myString isEqualToString:string2 ] )


[字串 isEqual:字串] or [字串 isEqualToString:字串]
在比對字串時上面兩個用法都可以用
用法詳細區別請去看官方library...

============== 抽取字串 ================
從字串開頭開始擷取到指定位置
很抽象對吧...由範例比較好懂

NSString *string1 = @"我是個笨蛋";
NSString *string2 = [string1 substringToIndex:2];

//print "我是"
NSLog(@"string2:%@",string2);

[字串 substringToIndex:數字];
由上面這範例可以清楚了解到所print出來就是從字串頭開始算你要幾個字

--
當然也可以從想要的地方開始找
NSString *string1 = @"我是個笨蛋";
NSString *string2 = [string1 substringFromIndex:3];

//print "笨蛋"
NSLog(@"string2:%@",string2);


[字串 substringFromIndex:數字];
從某一個字開始找字串

--
任意取出字串中想要的部份
NSString *string1 = @"我是個笨蛋";
NSString *string2 = [string1 substringWithRange:NSMakeRange(1, 4)];

//print 是個笨蛋
NSLog(@"string2:%@",string2);


[字串 substringWithRange:NSMakeRange(起始點(數字), 終點(數字))];
就可以直接取得想要的部份


相關連結
iOS Library
iOS Library - NSString Class Reference

iOS UIPickerView tutorial - IB

UIPickerView究竟是啥(請見下圖)


這是個在iphone內相當常見的一個功能
還可以切成好幾個欄位來作選取滾動
操作上是相當好用的
但是該如何切入使用呢?

首先開啟Interface Builder隨便拉一個UIPickerView


接著來看看有哪些屬性
先點下Inspector


就會出現這畫面,告訴你這個UIPickerView內有哪些東西可以來設定


但是光這樣拉UIPickerView compile後也是看不到任何內容
記得要把delegate還有dataSource連結上File's Owner
以及在.h檔內加上IBOutlet
#import

/*
UIPickerViewDelegate, UIPickerViewDataSource
上面這行是最重要的東西,也就是所謂的Delegate
一定要加入
*/
@interface UIPickerViewViewController : UIViewController {
//這兩行是讓Interface Builder裡面拖拉的物件連結在一起
IBOutlet UIPickerView *myPicker;
IBOutlet UILabel *myLabel;

//等一下要丟入的內容的陣列
NSMutableArray *myArray;
}

//這兩行是用property方式管理記憶體
@property (nonatomic, retain) IBOutlet UIPickerView *myPicker;
@property (nonatomic, retain) IBOutlet UILabel *myLabel;

@end


存檔後繼續開啟Interface Builder再來玩一下連連看
File's Owner上面點下右鍵連到picker


File's Owner上面點下右鍵連到label


如果你動作都跟我長得一樣現在在File's Owner上面應該會長這個樣


接著就是把內容丟入picker啦
開啟.m檔 直接把這些貼進去
#import "UIPickerViewViewController.h"

@implementation UIPickerViewViewController

//有使用property請記得這邊也要相對應
@synthesize myPicker, myLabel;

- (void)viewDidLoad {
[super viewDidLoad];

//給這個陣列一個記憶體位置
myArray = [[NSMutableArray alloc] init];
//一次塞100行進去看起來比較厲害
for(int i = 0; i < 100; i++){
//[陣列名稱 新增一個內容:內容(這邊給他一個字串)];
[myArray addObject:[NSString stringWithFormat:@"這是第 %d 行",i+1]];
}

}

/*************************************************************/
//當前所選擇為哪一項
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
//把選擇到的丟入 myLabel中顯示出來
myLabel.text = [myArray objectAtIndex:row];
}

//設定滾輪總共有己欄
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {
return 1;
}

//設定滾輪總共有幾個項目
- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component {
return [myArray count];
}

//設定滾輪每一個行位內容為啥
- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [myArray objectAtIndex:row];
}

/*************************************************************/


- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


- (void)dealloc {
//記得記憶體要把他給釋放掉(必須在[super dealloc]前)
[myPicker release];
[myLabel release];
[super dealloc];
}

@end


完成後的demo影片


下次再來介紹如何使用code直接在.m檔內實做UIPickerView以及UIDatePicker

相關連結
iOS UIPickerView Class Reference
Download this example

Google Analytics for Picasaweb

從很早很早以前就對picasa不能紀錄每張照片瀏覽次數很度爛
明明就是個很簡單的功能(有了也是很兩光)
最近google對於他自家的軟體整合性有大幅度的提昇

就拿自次主題的picasaweb來說好了
以前要再google earth上面能夠看到有座標的照片一定要去申請Panoramio
不然你Picasaweb標滿了座標在google earth上面也看不到
現在每張照片點開後右下角(如下圖)就有選項了


回到主題
前幾天不小心發現到現在有這功能"使用「Google Analytics (分析)」追蹤相片的觀賞次數"
不知道Google Analytics究竟是啥鬼?請看先前介紹
接著又到step by step啦
step 1:開啟你的picasaweb點選右上角的設定>>相片設定



step2:勾選"相片追蹤:「Google Analytics (分析)」可為您追蹤相片的瀏覽人數。"
此時候面會出現一個框要你輸入號碼,先別鳥他


step3:開設Google Analytics
進入自己的google帳戶內找出他


step4:建立新帳戶(新增一個追蹤服務)


step5:跟著他所要求慢慢輸入
重點!! "網站網址:"這邊要填入"http://picasaweb.google.com"


step6:完成後在"報表"欄位上會看到一串英文用力把他複製起來


step7:回到picasaweb這邊把剛剛複製的貼上


step8:慢慢等待
照官方說法要24小時...不過實際上似乎不用這麼久
反正隔一天應該就可以好了...如果沒有好表示...你步驟有錯

相關連結
此設定Google教學
Google Analytics介紹

周春明 - 計程車的一片天



今天去聽了他本人的演講
演講內容確實蠻感人的,有種感染力
面對這種環境下依然可以順利的生存確實很強勁
聽完後大致上花了一兩分鐘思考整理
1.差異化經營 - 再競爭激烈的環境中要如何脫引而出這個很大的關鍵,能夠搶到先機持續下去肯定會有相對的成效,想要達成差異化我認為最快的途徑就是跨領域,結合不同領域的專長創造出新的應用,就以這角度來看,大學畢業後一定要走相同領域的路嗎?我真的覺得未必,未來肯定是要絕對的專業與跨領域的人交互合作,就看每個人如何去定義自己。

2.時時刻刻保持危機感 - 當你還沈靜在成功的喜悅同時會造成更多的盲點,而這些盲點也將會是致命傷,時時刻刻警惕著自己,不能忘記原點,更不要怕面對未來。

3.以顧客為中心 - 服務頁來說應該沒有比這更重要,簡單來說就是以人為中心,將心比心,幫顧客想到更多,能想到別人沒想到的部份就是成功的關鍵,就像設計一樣,創意存在於生活中,看到別人呼略掉的部份,將其加以包裝。

4.隨時保持觀察、聆聽 - 外在環境每分每秒都在變,關心身邊週遭的事,關心別人的事,關心世界的事,蝴蝶效應就是這樣來的,地球就這麼大,誰知道國外發生了一件事情會跟你沒有關係?

老實講看到演講過程中一堆人拼命抄ppt上面的嘉言美句,然後再把他倒背如流...又怎樣?說 誰不會?能夠將其實踐你就不是作在台下聽的那位,就算站在台上也要保持危機感,時刻的充實自己,學無止盡。回家問父母「有沒有需要幫忙的?」還不如用雙眼去觀察,用雙手去實踐。每一天都當作是自己的最後一天,精彩的去實現,一個人很厲害沒有用,要能讓所有人都跟你一樣厲害才有用。