【问题标题】:How to copy TableView cell data to a NSMutable Array?如何将 TableView 单元格数据复制到 NSMutable 数组?
【发布时间】:2011-06-29 05:31:17
【问题描述】:

我对 iPhone 开发还很陌生。我使用 coredata 创建了 To-Do List 应用程序。所以,我的表格视图动态更新。 我想将表视图行文本标签添加到 NSMutable 数组(这意味着 row1 文本标签到 MutableArray 的第一个索引位置,row2 文本标签到数组的第二个索引位置)

这是用于 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;
}

注释行是我尝试的方式。但我很难根据需要添加这些数据。 请帮帮我

【问题讨论】:

  • 似乎你已经把它弄反了——数据应该来自数组并复制到表格单元格中。您能否编辑您的问题以解释您要完成的工作?
  • 您已经从 Core Data 中检索对象。为什么需要将这些单元格中的数据复制到另一个数组中?
  • 您可以直接从coredata(tableview数据源)中获取并将其传递给数组吗? mobile.tutsplus.com/tutorials/iphone/iphone-core-data 在此链接中检查 timetablecontroller.m 的代码
  • 请停止转发您的问题,改为编辑您的问题!

标签: iphone objective-c ios


【解决方案1】:

cellForRowAtIndexPath: 方法之外的某个位置添加listData = [[[NSMutableArray alloc] init]]; 行,这样就不会在每次加载单元格时重新分配它。您可以在当前所在的位置获得[listData addObject: [oneHero valueForKey:@"secretIdentity"]]; 行。

编辑:更好的是,您可以通过某种方法(例如 viewDidLoad:)执行此操作,以确保将所有元素添加到数组中。

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

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

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

【讨论】:

  • 非常感谢,我把 listData = [[[NSMutableArray alloc] init]autorelease]; 放在 viewdidLoad 方法中。但是后来我尝试从 listData 中检索对象,例如 NSString *str1 = [listData objectAtIndex:1]; 然后出现异常,请告诉我为什么?????
  • 是的。由于自动释放,从listData = [[[NSMutableArray alloc] init]autorelease]; listdata 行中删除 autorelease 在您访问其元素时已释放。
  • 是的,我已经试过了。当我打印数组时,它会显示所有元素:) 但是只有当我尝试这样 NSString *str1 = [listData objectAtIndex:1]; 如果我放 objectAtIndex:0 时,问题才会出现,它可以正常工作:(
  • @Sanjeewa Gunathilake,数组中有多少个元素?
  • @EmptyStack,因为这是 To-Do List 应用程序,项目数在变化
【解决方案2】:

首先:您应该从数据源中检索此数据。 第二:如果你想以你正在做的方式实现它......那么请确保你只分配一次这样的数组:

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

这会带来很大的问题,因为 cellForRow 会被多次调用,并且每次重新加载都会添加重复项。

最好的方法是在特定索引处使用 oneHero 对象来查找文本。

【讨论】:

  • 我试过这样。但问题是当我尝试检索 NSString *str2 = [listData objectAtIndex:1];它给出了例外。 listData 数组只有索引 0
  • 感谢您的提示。实际上我想要做的是,从我的 "oneHero" 对象中检索所有名称(这些是位置名称),然后在 mapView 中显示这些位置。这就是为什么我想将这些名称复制到单独的 NSMutable 数组或只是作为字符串你能帮我一个忙吗? . .
  • 你的意思是 NSManagedObject *oneHero = [self.fetchedResultsController objectAtIndexPath:anIndex];在 tableView 委托之外给出异常?您能否详细介绍一下 self.fetchResultsController 是什么?
【解决方案3】:

这么简单,定义一个 NSMUtableArray *arr = [NSMutableArray alloc] init];

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

然后在每种情况下添加开关

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

【讨论】:

  • 您是否为要在数组中的每个对象提议单独的case?!当项目数量发生变化时会发生什么?
  • no 我建议你在每个单元格加载数据的时候是在数组上输入数据的正确位置,看例子就知道他有两种情况所以在每种情况下都添加objectsm跨度>
  • 那么对象添加到数组中的顺序将是任意的。
  • 感谢您的提示。实际上我想要做的是,从我的 "oneHero" 对象中检索所有名称(这些是位置名称),然后在 mapView 中显示这些位置。这就是为什么我想将这些名称复制到单独的 NSMutable 数组或只是作为字符串你能帮我一个忙吗? . .
猜你喜欢
  • 2021-10-16
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 2017-06-29
  • 2012-05-17
  • 2014-09-27
相关资源
最近更新 更多