【发布时间】:2010-11-27 14:48:28
【问题描述】:
标准新手问题。我为 iOS 应用程序创建了一个数据模型。我可以使用 NSEntityDescription 对象从各种视图中创建、更新和删除模型中的实体。
假设我有一个从 fetch 请求返回的可变对象数组。当我没有从实体模型生成的对象定义时,如何循环遍历每一个?生成的对象定义是指数据模型包中描述的实体的标头和主体类定义。
【问题讨论】:
标签: objective-c xcode core-data
标准新手问题。我为 iOS 应用程序创建了一个数据模型。我可以使用 NSEntityDescription 对象从各种视图中创建、更新和删除模型中的实体。
假设我有一个从 fetch 请求返回的可变对象数组。当我没有从实体模型生成的对象定义时,如何循环遍历每一个?生成的对象定义是指数据模型包中描述的实体的标头和主体类定义。
【问题讨论】:
标签: objective-c xcode core-data
所有 CoreData 实体都派生自 NSManagedObject,并且所有来自这些实体的数据库数据都可以通过键值编码访问。您需要知道的最低限度可以从模型中获得。您不一定需要标题。
例如一个实体 PersonEntity 与 NameEntity 有关系,属性为 firstname
NSArray *results = [managedObjectContext queryEntityForName:@"PersonEntity" predicateFormat:nil argumentArray:nil];
for(NSManagedObject *object in results)
{
NSString *name = [object valueForKeyPath:@"nameobject.firstname";
[self doSomething:name];
}
queryEntityForName 是我自己的类别。您可能会发现它很有用。
@implementation NSManagedObjectContext(VMQueryAdditions)
-(NSArray *)queryEntityForName:(NSString *)name predicateFormat:(NSString *)pstring argumentArray:(NSArray *)arr
{
NSEntityDescription *entity = [NSEntityDescription entityForName:name inManagedObjectContext:self];
NSFetchRequest *fetch = [[[NSFetchRequest alloc] init] autorelease];
[fetch setEntity:entity];
NSPredicate *pred;
if(pstring)
{
if(arr) pred = [NSPredicate predicateWithFormat:pstring argumentArray:arr];
else pred = [NSPredicate predicateWithFormat:pstring];
[fetch setPredicate:pred];
}
NSError *error = nil;
NSArray *results = [self executeFetchRequest:fetch error:&error];
if (error) {
NSLog(@"MOC Fetch - Unresolved error %@, %@", error, [error userInfo]);
return [NSArray array];
}
return results;
}
@end
【讨论】: