2011-12-26 71 views
2

我想維護一個記錄列表,對於每個維護相同類型的數據。我想在2個不同的地方使用這個數據:從PList獲取數據到UITableView?

  1. UITableView從每條記錄的「名稱」值
  2. UIViewController這需要所有的數據在不同領域的使用需要。

我假設我應該使用plist來存儲數據;我還假設應該接收UITableView數據的對象是NSArray,所以我可以使用cellForRowAtIndexPath方法自動創建表。

所以我創建plist中「PLForArr.plist」: enter image description here

看來,我只能得到調用使用

NSString *path = [[NSBundle mainBundle] pathForResource:@"PLForArr" ofType:@"plist"]; 
NSArray * myArr = [[NSArray alloc] initWithContentsOfFile:path]; //doesn't work... 
NSDictionary * myDict = [[NSDictionary alloc] initWithContentsOfFile:path]; //does work, but who to I make a NSArray out of it/or get the data from here to the UITableView? 

我明白,我不明白的plist時的NSDictionary一些基本的東西在這裏...能有人把我一步一步:

  1. 如何保持數據 - S我應該用plist還是別的東西?我是否應該有一個類型數組的主記錄(就像我在這裏的示例plist所做的那樣),還是可以將它保留爲這些字典,而不用我使用的不必要的MyArr考慮UITableView最終目標?
  2. 如何調用數據 - 有沒有辦法讓它進入NSArray或必須進入NSDictionary
  3. 如何將它調用到UITableView中 - 我可以使用NSDictionary填寫行嗎?

回答

2
  1. 存儲的數據是一個數組或字典是你。但是,如果您想隨時間對其進行更改,則無法將其存儲在主包中。

  2. 您的pList文件是一個包含數組的字典。看下面的代碼示例。

  3. 您將不得不將字典存儲在您的表的數據源的數組中。看下面的代碼示例。

假設你的UITableView的數據源被稱爲tableArray。您可以使用tableArray填寫表格和視圖中的信息。噢,

NSString *path = [[NSBundle mainBundle] pathForResource:@"PLForArr" ofType:@"plist"]; 
NSDictionary *myDict = [[NSDictionary alloc] initWithContentsOfFile:path]; 

NSArray *myArray = [myDict objectForKey:@"MyArray"]; 
self.tableArray = [myArray copy]; 
[myArray release]; 
[myDict release]; 

這正好的tableView:的cellForRowAtIndexPath:

cell.text = [[tableArray objectAtIndex:row]objectForKey:@"Obj Name"]; 
2
  1. 存儲你的數據無論是在一本字典,或在一個陣列是由你。根據您擁有的數據類型,您將考慮存儲無序的對象集合(字典),使用訪問條目;或者更確切地說是在有序集合(數組)中,使用數字索引

  2. 可以從屬性列表文件中獲取數組,但根(頂層)對象是字典(在屏幕截圖中,「MyArr」不是頂層對象,它是訪問您的關鍵頂級字典中的數組)。爲了從中得到你的數組,只需按照你的方式分配/初始化plist字典,然後使用它的鍵([myDict objectForKey:@"MyArr"])訪問數組條目。否則,請確保您設置的屬性列表的根對象是一個數組,然後重試NSArrayinitWithContentsOfFile:

  3. 真正的問題似乎是如何我可以填補細胞與我的數據?表視圖詢問它的代表和dataSource關於一個部分中有多少部分,行來顯示。根據這些數字,它會詢問數據源的單元格。再一次取決於您選擇的存儲類型,您將以稍微不同的方式實現這些方法,但概念依然存在。

你可能會想閱讀有關文件: