将核心数据属性的所有值加载到数组中

时间:2010-07-06 01:49:15

标签: iphone objective-c cocoa-touch xcode core-data

我有一个属性“term”,它是我的核心数据“Event”中的NSString。 加载表视图时,我希望将“name”的所有值加载到数组中。

我使用了代码

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
      Event   *event  = nil;
      event = [fetchedResultsController objectAtIndexPath:indexPath];
    if(searching){
        cell.textLabel.text = [copyListOfItems objectAtIndex:indexPath.row];
    }else{   
          if(event.term){ 
                [listOfItems addObject:event.term]; 
         }
          cell.textLabel.text = event.term;
          cell.detailTextLabel.text = event.definition;
      }
}

问题是所有术语都没有加载到NSMutableArray listOfItems。当表格单元格滚动到底部时加载它。

如何将“term”的所有内容从核心数据加载到数组listOfItems。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您很可能看错了核心数据。核心数据 不是 数据库。它是一个碰巧持久存储到数据库的对象图。话虽如此,您的问题最好被问为“我如何加载实体'事件'的所有实例并访问其术语属性”。

为此,您希望针对没有谓词的“事件”实体构建和执行NSFetchRequest

NSManagedObjectContext *moc = ...;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Event" inManagedObjectContext:moc]];
NSError *error = nil;
NSArray *events = [moc executeFetchRequest:request error:&error];
NSAssert2(events != nil && error == nil, @"Error fetching events: %@\n%@", [error localizedDescription], [error userInfo]);

然后,您可以使用'KVC'来检索name属性的数组:

NSArray *namesArray = [events valueForKey:@"name"];

这将导致数组只填充该字符串。

然而,更好的问题是,如果要在表格中显示所有内容,为什么要使用数组? NSFetchedResultsController已经为您检索了所有“事件”实体;它只是绑定到表的显示。你的目标是什么?

更新

  

非常感谢Marcus先生的详细答案......我的目标是使用搜索栏从核心数据中搜索特定的“术语”。有没有更好的方法呢?

是的,并且有很多解决方案。您可以使用其NSFetchedResultsController属性访问现有-fetchedObjects的所有结果。从那里,您可以使用NSPredicate对该数组应用-filteredArrayUsingPredicate:来获取已过滤的数组,然后您可以在搜索结果中使用该数组。

如果你在搜索核心数据的SO和UISearchDisplayController,我怀疑你会发现很多结果和建议。