網頁

2013年2月27日 星期三

plist 的建立與code的讀取

[iphone app開發]

在之前的例子中,三個菜單名稱是hard code 在 viewDidLod 中的,我希望讓他是可以從外部讀取,好讓以後我可以不用每增減一個就要改code一次。

建立新的plist
1. New File > Mac OS X Resource > Property List
取名叫做 recipeArray.plist

2. 在左邊Supporting Files 裡面找到剛剛新增的recipeArray.plist 檔案上面按右鍵,用code 的方式開啟。

UITableView 在IOS 上的記憶體運作

[iphone app 開發]



小結: 由上圖運作方式可知道,UITableView 只秀螢幕所看的道的部份。他並不是有多少資料全部一次load 到記憶體來。且再次重show 時也不是再次重要一個記憶體,而是去bucket暫存桶中再抓出來。

2013年2月26日 星期二

Muti-View 多重視圖 與 Master-Detail app (MySecretRecipe)

[iphone app 開發]

之前的文章,針對的是一個"RD很忙的app" 作討論,從這篇開始,

將跨入多個view 的app 討論,我將學習國外的知名app Drink Mixer 和 iphone 中的 mail 和

Contacts 來繼續更進階的iphone app 討論。

我命名為 : MySecretRecipe。
目的:很簡單,讓使用者能自行輸入自己最拿手的食譜,原料,和作法,可以隨著iphone帶著走,無論是到異地作菜,或是去市場買菜,直接拿出來管理,編輯。
可能會使用的人: 新手廚師,一般做菜的人,負責採買的人。


1.一開始先創一個Master-Detail app 的project.
(以前的Navigation-based app 類型被這個取代了)

2. 第一個目標,我們希望在中間這個table view 的地方,先預設 show 出三到菜的名稱。



3.接著,當你點下其中一道菜,app會往下show 出那到菜的細節和作法。

就是這樣。


2013年2月25日 星期一

UITextField 與 keyboard 的互動


[iphone app 開發]

當user 點了UI上的 TextField 時,便會自動跳出鍵盤如下。




不過,build完之後,會發現,你點擊textField 鍵盤是跳出來了沒錯,但是縮不回去了。

也就是說,

ios中的方法宣告,訊息傳送,引數,與 本地名稱/公開名稱

[iphone app 開發]

我們來看一個例子


- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

這個是在 pick view 的 delegate 中要求要實作的方法

其中
- (NSString *)  
- 表示他是實例方法(instance method)
(NSString *) 表示這個方法會回傳一個NSString 的指標

加入Text Field 到iphone app 讓使用者輸入

[iphone app 開發]

如果想加入一個輸入欄位,接收使用者利用鍵盤輸入字串,該怎麼做呢?
經過前面的文章,我想我們應該知道....
再還沒動手之前你應該就有隱隱約約的感覺...
1. 在interface Builder 上你發現, 那個TextField 它的類別是 UITextField,所以,早就知道,
到時候為了能拿到user 的data , 想必需要一個同樣型別的變數來接他。
所以, 在. h 中要宣告  UITextField xxxxx;

IOS 下 app 的記憶體管理 : 流程圖

[iphone app 開發]

一個reference count (retain count) 的循環圖。


IOS 下 app 的記憶體管理: 大方向

[iphone app 開發]

大觀念:
IOS 下的 Objective-c 沒有garbage collector, 而是用比較像linux 的 reference counting, 它會
看這個物件有多少人reference 它,而在這個reference count 變為0 的時候才釋放它。

另外一種想法是,物件被一個或一個以上的人擁有,就能繼續存在,直到沒有人在擁有這個物件,它的retain count = 0 時,就會被釋放且清理。

簡單說,這樣就會釋放掉當初宣告內容特性所用過的記憶體。


@property 和 @synthesize 在搞啥?

[iphone app 開發]


@property

照上篇

一行一行講:iphone app dev 中 .h 在做什麼


裡面提到的,@property 會讓編譯器知道,後面將會宣告一個內容,而接在@property 後面的(A , B) 將會填上一些屬性。

2013年2月24日 星期日

一行一行講:iphone app dev 中 .h 在做什麼

[iphone app 開發]

xxxviewController.h


1. 是我們想要幫class加入新的"method"和"interface"還有準備要使用的"變數"的預先 "宣告" 的地方。實作會在 .m 當中,但是一些屬性設定,就得在.h 中先處理好。

2. 換個簡單的說法:標頭檔.h 是讓你宣告現在在用的這個class....
a. 是否繼承任何東西
b.會用到(包含的) 實體變數 (instance variable), 什麼樣的特性(property)方法(method)


用藍色的字一行一行講


2013年2月22日 星期五

Blogger 常用外掛

1. 您或許對這些文章有興趣
http://www.linkwithin.com/learn


IBAction and IBOutlet (1) 取得user 在picker 中所選的兩個詞組

[iphone app 開發]

如同之前的例子,在picker view 上,現在有了完整的資料可以讓user
點選,而下方也有個寄出的按鈕,很明顯的,我打算把使用者選好的
內文加上一些固定的話語當做email來寄出。


在寄出(跟email行為)扯上關係之前,我想先確認,我能正確取得user 所選取的

兩個字詞嗎? 也就是能夠取得picker view裡正確的值嗎?



2013年2月21日 星期四

Datasource and Delegate 的分別 (5) 一些最後細節

[iphone app 開發]

要再你的 viewController.h 中宣告你要依照 datasource 和 delegate 的 protocol 實作
且加入兩個陣列。


Datasource and Delegate 的分別 (4) 照著 Delegate Protocol 辦事

[iphone app 開發]

做完了 datasource 的 protocol 後,換要完成 delegate 的。

一樣,從apple 的 doc 中知道,有一個一定要實作的method 是



Datasource and Delegate 的分別 (3) 照著 datasource Protocol 辦事

[iphone app 開發] 完成datasource 的protocol.


ok, 知道了每個控制項(ex: picker view) 要實作自己的datasource and delegate 後,
那如果每個開發者都自己亂做,或是不照著apple 想要的作,那這個picker view 豈不是
相當難維護,且天下大亂嗎?

所以,apple 在document 中就寫明了,那些method 是 picker 的 datasource 必須實作的,怎麼實作,和回傳什麼值,delegate 也是,所以,換言之。


Datasource and Delegate 的分別 (2) 一些細節


[iphone app 開發]

上篇文章最後提到....

每一個控制器(picker view 之類的人),都會有自己各別的 datasource 和 delegate....

所以 picker view 有 UIPickerDatasource ,且

1. 控制項 Picker view 不管datasource 如何取得picker view 所需要的資訊, 這邊是需要
顯示的資料欄數。 Datasource 可能用 陣列,資料庫,plist 等等儲存資料,但是對於
picker 來說不重要,它也不想管,只要 datasource 能回給 picker view 想要的資訊即可,不管
datasource 內部是如何儲存資料。


Datasource and Delegate 的分別 (1) 主要分別

[iphone app 開發]

這兩個最快的分別,用一個例子來舉例

如果在畫面上有個 picker view,則....





[Datasource]
1.Picker view 會問 datasource 它該如何表現
2.datasource 會告訴他你有 9欄的數量需要show 在 iphone 手機的 picker view 中