2

我有一个 NSManageObject 设置为核心数据中的实体。获取实体后,我希望能够提取所有属性并将它们放入 NSMutableArray 以填充 UITableView。

例如: 实体: 项目

属性:开始日期(必需);完成日期(可选);项目名称(必填);ETC....

如何将所有这些放入 NSMutableArray?或者有没有更好的方法来填充 UITableView?

4

3 回答 3

7

你可以通过询问NSEntityDescription它的NSAttributeDescription对象来得到它:

NSManagedObject *object = ...;
NSEntityDescription *entity = [object entity];
NSDictionary *attributes = [entity attributesByName];

NSMutableArray *values = [NSMutableArray array];
for (NSString *attributeName in attributes) {
  id value = [object valueForKey:attributeName];
  if (value != nil) {
    [values addObject:value];
  }
}

注意:这仅包含属性,不包含关系。如果您只需要关系值,则可以使用-relationshipsByName. 如果你想要属性和关系,你可以使用-propertiesByName.

决定这是否是一个好主意留给读者作为练习。

于 2012-10-17T02:58:58.527 回答
0

编辑

只需向您的实体添加一个返回非空属性数组的方法:

- (NSMutableArray*)nonNullAttributes {
    NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithCapacity:0];

    //Pretend you have an attribute of startDate
    if (startDate && startDate != null) {
        [mutableArray addObject:startDate]
    }

    //Do this for all of your attributes.
    //You might want to convert the attributes to strings to allow for easy display in the tableview.

    return mutableArray;
}

你可以在你的 NSManagedObject 子类中添加它。然后,您可以使用数组的计数来知道要拥有多少行。

原始答案

为什么还要费心将属性放入数组中?只需在填充表格视图时直接从实体访问它们。

于 2012-10-17T02:39:22.990 回答
0

你不能只executeFetchRequest用来获取数组吗?

NSEntityDescription *entity = [NSEntityDescription
                                   entityForName:@"Project"    
                                   inManagedObjectContext:someContext];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [someContext executeFetchRequest:fetchRequest error:&error];
于 2012-10-17T02:45:11.113 回答