ios7數據添加1——Start Developing iOS Apps Today——從今天開始開發IOS(IOS7版)系列源文檔翻譯(十九) – iPhone手機開發技術文章 iPhone軟體開發教學課程

本教程建立在之前關於Storyboard創建的項目上。你會使用你所學到如何使用設計模式,與Fundaction的工作,並編寫自定義類中添加動態數據支持你的todolist的應用程序。

本教程教您如何:

1.與普通基礎類工作

2.創建自定義數據類

3.實現一個委托和數據源協議

4.通過視圖控制器之間的數據

5.在您完成本教程中的所有步驟,你就會有一個應用程序,看起來像這樣:

創建一個數據類

開始使用,在Xcode中打開現有的項目。
在這一點上,你必須使用StZ喎?https://www.aiwalls.com/kf/ware/vc/” target=”_blank” class=”keylink”>vcnlib2FyZLXEdG9kb2xpc3S1xNOm08OzzNDytcS958Pmus21vLq9t72wuKGjz9bU2qOsysfKsbryzO2807XEyv2+3bTmtKKjrLKi0+vEo9DNttTP87XE0NDOqqGjPGJyPgrE+rXE06bTw7PM0PK1xMS/serKx7S0vai0/bDsysLP7sHQse2jrMv50tTK18/IxOPSqrS0vajSu7j219S2qNLlwOCjrCBYWVpUb0RvSXRlbSCjrLT6se249sjLtP2w7MrCz+6ho8T6v8nE3Lu5vMe1w6Os1NpYWVpUb0RvSXRlbcDg1tCx4NC019S2qNLlwOC9+NDQwcvM1sLboaM8YnI+CjxzdHJvbmc+PGJyPgo8L3N0cm9uZz4KPHN0cm9uZz7SqrS0vahYWVpUb0RvSXRlbcDgPC9zdHJvbmc+PGJyPgoxLtGh1PFGaWxlID4gTmV3ID4gRmlsZaOou/KwtENvbW1hbmQgLU4go6kgoaM8YnI+CrP2z9bSu7j2ttS7sL/yo6zM4cq+xPrRodTx0MLOxLz+tcTEo7DloaM8YnI+CjIu1NrX87Lgo6zRodTxaU9TtcTPwkNvY29hIFRvdWNooaM8YnI+CjMu0aHU8bXET2JqZWN0aXZlLSBDwOCjrMi7uvO1pbv3z8LSu7K9oaM8YnI+CjQu1NrA4MHs0/KjrCBYWVrHsNe6uvPD5rz8yOu1xFRvZG9JdGVtIKGjPGJyPgo1LrTTta+z9rLLtaXW0LXEobBTdWJjbGFzcyBvZqGx0aHU8U5TT2JqZWN0tcShozxicj4KyOe5+8Tj0rvWsbj6y+bXxb3Ms8zN6sirz+DNrKOswOCx6szitPO4xcu1WFlaVG9Eb0l0ZW1WaWV3Q29udHJvbGxlctTatMvWrsewtcSyvdbooaO1scT60aHU8U5TT2JqZWN0tcTOqqGw19PA4KGxtcRYY29kZdaqtcDE49X91NrX9tK7uPbV/bOjtcTX1Lao0uXA4KOssqLJvrP9tcRWaWV3Q29udHJvbGxlcs7Esb6jrMv8ysfS1MewvNPI66GjPGJyPgo2LrWlu/fPwtK7sr2hozxicj4KNy64w8671sPErMjPsaO05rW9xPq1xM/uxL/Ev8K8oaOhozxicj4KOC7V4tfp0aHP7sSsyM/OqsT6tcTTptPDs8zQ8rXEw/uzxqOsIHRvZG9saXN0oaM8YnI+Cjku1NrEv7Hqsr+31sSsyM/Oqr7f09DTw9PaxPq1xNOm08OzzNDyzrTRodbQxOO1xNOm08PRodTxus2y4srUoaM8YnI+CjEwLrWlu/e0tL2ooaMKPGJyPgq4w1hZWlRvRG9JdGVtwODKtc/WxvDAtLfHs6O88rWloaPL/NPQxuTD+7PGo6y0tL2oyNXG2sr00NSjrMfSuMPP7sS/yse38dLRvq3N6rPJoaPAtLDJo6y808jr1eLQqcr00NS1xFhZWlRvRG9JdGVtwOC907/aoaM8YnI+Cgo8YnI+Cgo8c3Ryb25nPsXk1sNYWVpUb0RvSXRlbcDgIDwvc3Ryb25nPjxicj4K1NrP7sS/tby6vcb31tCjrNGh1PFYWVpUb0RvSXRlbS5ooaMgPGJyPgq9q9LUz8LK9NDUzO2807W9vdO/2qOs1eLR+bXEyfnD97+0xvDAtM/x1eLR+aO6PGJyPgoKPHByZSBjbGFzcz0=”brush:java;”>@interface XYZToDoItem : NSObject

@property NSString *itemName;
@property BOOL completed;
@property (readonly) NSDate *creationDate;

@end
要點:生成項目通過選擇Product > Build (或按下Command-B)。你不使用你的新類做任何事,但建設它給編譯器一個機會來驗證您還沒有作出任何打字錯誤。如果你有,修復它們通過編譯器提供的警告或錯誤讀數,再回頭看在本教程中的說明,以確保一切看起來它在這裡所描述的方法。

添加數據

現在你有一個類,您可以創建和存儲為單個列表項的數據。您還需要保留這些項目的列表。自然的地方來追蹤這是在XYZToDoListViewController類視圖控制器負責模型和視圖之間的協調,因此他們需要一個參考模型。
Foundation框架包含一個類,NSMutableArray裡,行之有效的項目跟蹤列表。使用可變數組是很重要的,這樣用戶可以將項目添加到數組中。不可變版本,NSArray的,不允許你將項目添加到它它的初始化之後。
如果要使用,你需要兩個聲明並創建一個數組。您可以通過分配和初始化數組做到這一點。

分配和初始化數組
1.在項目導航器中,選擇XYZToDoListViewController.m。
因為項目的數組是你的表視圖控制器的實現細節,你在m文件,而不是。h文件中聲明它。這使得它私有的自定義類。
2將以下屬性添加到您的自定義表視圖控制器類中創建的接口類的Xcode。該聲明應該是這樣的:

@interface XYZListViewController ()
 
@property NSMutableArray *toDoItems;
 
@end

3.分配和初始化toDoItems數組中的viewDidLoad方法:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.toDoItems = [[NSMutableArray alloc] init];
}

為viewDidLoad中的實際代碼包含一些額外的行插入由Xcode時,它創建XYZListViewController,被註釋掉。歡迎留下他們。
在這一點上,你有一個數組,你可以添加項目。你會在一個單獨的方法,loadInitialData,你會從viewDidLoad中調用做到這一點。這個代碼放在自己的方法,因為它是一個模塊化的任務,你可以通過使這種方法單獨提高代碼的可讀性。在一個真正的應用程序該方法將加載由某種持久存儲的數據,如文件。現在,我們的目標是怎麼看的表視圖適用於自定義數據項,所以您將創建一些測試數據進行實驗。
分配和初始化:在您創建的陣列的方式創建一個項目。然後,給項目的名稱。這是將在表視圖中顯示出來的名稱。做到這一點的幾個項目。

加載初始數據
1.添加一個新方法,loadInitialData,下面的@implementation行。

- (void)loadInitialData {
}

2.在這個方法中,創建瞭幾個列表項,並把它們添加到數組中。

- (void)loadInitialData {
    XYZToDoItem *item1 = [[XYZToDoItem alloc] init];
    item1.itemName = @"Buy milk";
    [self.toDoItems addObject:item1];
    XYZToDoItem *item2 = [[XYZToDoItem alloc] init];
    item2.itemName = @"Buy eggs";
    [self.toDoItems addObject:item2];
    XYZToDoItem *item3 = [[XYZToDoItem alloc] init];
    item3.itemName = @"Read a book";
    [self.toDoItems addObject:item3];
}

3.調用loadInitialData在viewDidLoad方法。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.toDoItems = [[NSMutableArray alloc] init];
    [self loadInitialData];
}

要點:通過選擇Product > Build。你應該會看到許多錯誤您loadInitialData方法的線條。關鍵什麼是第一行,這應該說是“使用未聲明的標識符XYZToDoItem。”這意味著,編譯器不知道你XYZToDoItem時,它的編譯XYZToDoListViewController。編譯器是非常特殊的,需要被明確告知有什麼要註意。

告訴編譯器要註意您的自定義列表項類
1.找到的#import“XYZToDoListViewController.h”傍邊XYZToDoListViewController.m文件的第一行。
2.添加以下行緊接其下:

#import "XYZToDoItem.h"

要點:通過選擇Product > Build生成項目。它應該建立且沒有錯誤。

顯示數據

在這一點上,你的表視圖都有的預填充一些示例待辦事項可變數組。現在,你需要顯示在表格視圖中的數據。
你會通過使XYZToDoListViewController表視圖的數據源做到這一點。為瞭使一些表視圖的數據源,它需要實現UITableViewDataSource協議。事實證明,你需要實現的方法,正是您在第二個教程中註釋掉的。有一個功能表視圖需要三個方法。其中第一項是numberOfSectionsInTableView : ,它告訴表視圖有多少部分顯示。對於這個程序,你想要的表視圖來顯示一個單一的部分,所以實現非常簡單。

要顯示表中的一個部分
1.在項目導航器中,選擇XYZToDoListViewController.m 。
2.如果你註釋掉的第二個教程表視圖的數據源的方法,現在刪除這些註釋標記。
3.找到模板實現的部分看起來像這樣。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
#warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 0;
}

你想有一個單一的部分,所以你要刪除的警戒線和返回值從0改為1。
4.更改numberOfSectionsInTableView:數據源方法返回一個單一的部分,像這樣:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

下一個方法,實現代碼如下:numberOfRowsInSection:告訴表視圖多少行給定的部分中顯示。你在你的表中的單個部分,每個待辦事項應該在表視圖自己的行。這意味著行數應該是XYZToDoItem對象中的toDoItems陣列的數目。

返回行的表中的數
1.在項目導航器中,選擇XYZToDoListViewController.m。
2.找到模板實現,它看起來像這樣的一樣:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning Incomplete method implementation.
    // Return the number of rows in the section.
    return 0;
}

你想回到你有列表項的數目。幸運的是,NSArray中有一個名為count返回數組中的項目數易用的方法,所以行數是[self.toDoItems count]。
3.改變實現代碼如下:numberOfRowsInSection:數據源方法來返回行的相應數量。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [self.toDoItems count];
}

最後一個方法,實現代碼如下:cellForRowAtIndexPath : ,要求一個單元格顯示為一個給定的行。到現在為止,你已經工作,隻有代碼,但要顯示的行的單元格是你的界面的重要部分。幸運的是, Xcode中可以很容易地設計自定義單元格在Interface Builder 。第一個任務是設計你的手機,並告訴表視圖,而不是使用靜態內容,它是將要使用的原型細胞與動態內容。


配置您的表視圖
1.打開你的storyboard。
2.選擇在大綱表視圖。
3.與表視圖中選擇,打開在工具區域中的屬性檢查器中。
4.在屬性檢查器中,更改表視圖的內容屬性,從靜態到細胞動態原型。

Interface Builder中你需要配置的靜態細胞,並將它們轉換成所有的原型。原型細胞,顧名思義,是指配置瞭文字樣式,顏色,圖像或其他屬性,隻要你想他們要顯示但在運行時從數據源獲取數據的單元格。數據源加載一個原型電池的每一行,然後配置該單元格以顯示該行的數據。
加載正確的單元格,數據源需要知道它叫什麼,這個名字也必須在腳本配置。
當你設置瞭原型單元名稱,您還可以配置其他物業小區選擇的風格,它決定細胞的出現,當用戶點擊它。設置小區選擇樣式為無,這樣,當一個用戶點擊瞭的細胞不會被突出顯示。這是你想要當一個用戶點擊一個項目的待辦列表為已完成或尚未完成的 – 一個功能,您將在本教程的後面實施,以紀念它的細胞有行為。

配置原型細胞
1.選擇表中的第一個表視圖單元格。
2.在屬性檢查器中,找到標識符字段,然後鍵入ListPrototypeCell 。
3.在屬性檢查器中,找到選擇字段,然後選擇無。

您也可以更改字體或原型細胞的其他屬性。基本配置是易於使用,因此你會保持這一點。
下一步是教你的數據源如何通過實施實現代碼如下配置單元的給定行:cellForRowAtIndexPath : 。此數據源的方法是所謂的表視圖,當它想顯示一個給定的行。對於具有少量的行表視圖,所有的行可能會在屏幕上一次,所以這種方法被調用的每一行中的表。但有大量行的表視圖在一個給定的時間顯示其總項目的一小部分。這是最有效的表意見,隻要求該單元格所顯示的行,而這正是實現代碼如下:cellForRowAtIndexPath :允許表視圖做。
對於表中的任何給定的行,取toDoItems數組中對應的條目,然後在單元格的文本標簽設置為項目的名稱。

顯示在單元格的表
1.在項目導航器中,選擇XYZToDoListViewController.m 。
2.找到實現代碼如下:cellForRowAtIndexPath :數據源的方法。模板實現看起來像這樣:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
 
    // Configure the cell...
 
    return cell;
}

該模板執行多個任務。它創建瞭一個變量來保存標識符的單元格,要求與該標識符的單元格的表視圖,增加瞭約其中的代碼可以將單元配置應該去一個註釋,然後返回該單元格。
為瞭使您的應用程序的代碼工作,你需要標識符更改為您在腳本設置一個,然後添加代碼來配置的單元格。
3.更改單元格標識符您在腳本設置之一。為瞭避免錯別字,請復制並粘貼到腳本的執行文件。該區標識行現在看起來應該像這樣:

static NSString *CellIdentifier = @"ListPrototypeCell";

4.隻要return語句之前,添加下面的代碼行:

XYZToDoItem *toDoItem = [self.toDoItems objectAtIndex:indexPath.row];
cell.textLabel.text = toDoItem.itemName;

你的tableView:cellForRowAtIndexPath:回事這樣的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ListPrototypeCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    XYZToDoItem *toDoItem = [self.toDoItems objectAtIndex:indexPath.row];
    cell.textLabel.text = toDoItem.itemName;
    return cell;
}

要點:運行您的應用程序。您在loadInitialData添加的項目列表中應該顯示為單元格在表視圖。

發佈留言