2011-06-29 47 views
0

我對iphone的開發很陌生。我使用coredata創建了待辦事項列表應用程序。所以,我的表視圖動態更新。 我想表視圖行textlabels添加至NSMutable陣列(這意味着ROW1文本標籤MutableArray的第一轉位位置,ROW2文本標籤陣列的第二索引位置)如何將TableView單元格數據複製到NSMutable陣列?

這是我的表視圖cellfor indexpath方法

- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *HeroTableViewCell = @"HeroTableViewCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:HeroTableViewCell]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:HeroTableViewCell] autorelease]; 
    } 
    NSManagedObject *oneHero = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    NSInteger tab = [tabBar.items indexOfObject:tabBar.selectedItem]; 
    switch (tab) { 
     case kByName: 
      cell.textLabel.text = [oneHero valueForKey:@"name"]; 
      cell.detailTextLabel.text = [oneHero valueForKey:@"secretIdentity"]; 
      break; 
     case kBySecretIdentity: 
      cell.detailTextLabel.text = [oneHero valueForKey:@"name"]; 
      cell.textLabel.text = [oneHero valueForKey:@"secretIdentity"]; 
     default: 
      break; 
    } 


    //listData = [[[NSMutableArray alloc] init]autorelease]; 

    //if(indexPath.row==1){ 
      //[listData addObject: cell.textLabel.text]; 


    return cell; 
} 

評論行是我如何做到這一點。但我很努力地添加這些數據。 請幫我

+2

好像你已經得到它 - 數據應該來自陣列並複製到表單元格。你能編輯你的問題來解釋你想完成什麼嗎? – Caleb

+3

您已經從核心數據中檢索對象。爲什麼需要將這些單元格中的數據複製到另一個數組中? –

+1

你可以直接從coredata(tableview datasource)獲取並傳遞給一個數組no ?? http://mobile.tutsplus.com/tutorials/iphone/iphone-core-data/在這個鏈接檢查timetablecontroller.m代碼 – sujith1406

回答

3

listData = [[[NSMutableArray alloc] init]];中的某些行出現在cellForRowAtIndexPath:方法中,以便每次單元加載時都不會重新分配。你可以在[listData addObject: [oneHero valueForKey:@"secretIdentity"]]; 目前的位置。

編輯:你可以更好的一些方法做到這一點,像viewDidLoad中:,以確保所有元素添加到陣列中。

listData = [[[NSMutableArray alloc] init]]; 

for (NSManagedObject *oneHero in [self.fetchedResultsController allObjects]) { 

    [listData addObject: [oneHero valueForKey:@"secretIdentity"]]; 
} 
+0

非常感謝,我把** listData = [[[[NSMutableArray alloc] init] autorelease]; ** in viewdidLoad method。但後來我嘗試從listData中檢索對象,就像這樣** NSString * str1 = [listData objectAtIndex:1]; **然後發生異常,請告訴我爲什麼????? – sajaz

+0

是的。從行'listData = [[[[[[[NSMutableArray alloc] init] autorelease]'行中刪除** autorelease **;'listdata當時被釋放,因爲autorelease,你訪問它的元素。 – EmptyStack

+0

是的,我已經嘗試過了。當我打印數組,它顯示所有的元素:)但問題只發生在我嘗試像這樣** NSString * str1 = [listData objectAtIndex:1]; **如果我把objectAtIndex:0,它很好:( – sajaz

0

這麼簡單,定義一個 NSMUtableArray * arr = [NSMutableArray alloc] init];

NSMutableArray *arr = [[NSMutableArray alloc] init]; 

然後添加開關在每種情況下

[arr addObject:@"Object You Want To Add"]; 
+0

你是否爲你想要在數組中的每個對象提出一個單獨的'case'?項目數量變化時會發生什麼? –

+0

不,我建議當你在每個單元格中加載數據是在數組中輸入數據的正確位置,看看例子,你會發現他有兩種情況,所以addobjectsm在每種情況下都是 – user784625

+0

然後,將對象添加到該數組將是任意的。 –

2

第一:你應該檢索數據源此數據。 第二:如果你想實現它,你正在做它的方式......然後確保你分配陣列只有一次這樣的:

if(array == nil) 
{ 
    array = [[NSMutableArray alloc] init]; 
} 

這將有顯著的問題,因爲cellForRow被稱爲若干次,並每次重新加載您最終都會添加重複項。

最好的方法是在特定索引處使用您的oneHero對象來查找文本。

+0

我試過這樣。但問題是當我嘗試檢索NSString * str2 = [listData objectAtIndex:1];它給了例外。listData數組只有索引0 – sajaz

+0

感謝您的提示。實際上我想要做的是,從我的**「oneHero」**對象中檢索所有名稱(這些是位置名稱),然後在mapView中顯示這些位置。這就是爲什麼我想要將這些名稱複製到**獨立的NSMutable數組或像字符串** 您可以請給我一個cording幫助。 。 。 – sajaz

+0

你的意思是NSManagedObject * oneHero = [self.fetchedResultsController objectAtIndexPath:anIndex];在tableView委託之外是否發生異常?你能否提供更多關於什麼是self.fetchResultsController的細節。 – Ved

相關問題