2011-06-29 48 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

相关问题