我正在尝试使用从CoreData获取的数据集合来填充 NSArray 。但我的数组似乎没有填充数据。我有以下代码来检索数据:
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]
initWithEntityName:@"WeightLog"];
self.contactarray = [[managedObjectContext executeFetchRequest:fetchRequest
error:nil] mutableCopy];
我正在使用以下for循环来填充NSArray,其中包含我从WeightLog为特定字段收集的数据。
for (int i =0; i<=self.contactarray.count; i++) {
NSManagedObject *device = [self.contactarray objectAtIndex:i];
[titleNames addObject:device];
}
您知道 contactarray 是以下格式的.h文件中的属性:
@property (strong) NSMutableArray *contactarray;
请告诉我出错的地方,如果它没有显示,我是iOS开发的新手。
提前谢谢
答案 0 :(得分:0)
这一行:
self.contactarray = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
这是核心数据中的一个主要原因 - 不使用提供的错误参数。
NSError *error;
self.contactarray = [[managedObjectContext executeFetchRequest:fetchRequest
&error] mutableCopy];
if (!self.contactArray) {
// Fetch Requests return a nil on error, in which case you should check the error.
NSLog(@"Error occurred: %@", error);
} else {
// do whatever you want with the array
}
现在运行您的代码并查看控制台,您可能会看到错误的原因。
已编辑添加
发表评论:
在评估错误对象之前,您应始终检查方法的返回是否为nil
。对于Cocoa(和Cocoa-Touch)方法,这是唯一保证error参数有效的时间。
这取自Error Handling Programming Guide
答案 1 :(得分:0)
使用前初始化titleNames
数组。试试这个,
titleNames = [[NSMutableArray alloc] init];
for (int i =0; i<=self.contactarray.count; i++) {
NSManagedObject *device = [self.contactarray objectAtIndex:i];
[titleNames addObject:device];
}
答案 2 :(得分:0)
只需调用此用户定义的方法即可。对于前 -
self.titleNames = [self selectAllRowInEntity:@"WeightLog"];
-(NSArray *) selectAllRowInEntity:(NSString *) entityName
{
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fRequest;
NSEntityDescription *eDesc;
NSArray *arr;
fRequest = [[NSFetchRequest alloc] init];
eDesc = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext];
[fRequest setEntity:eDesc];
arr = [managedObjectContext executeFetchRequest:fRequest error:nil];
return arr;
}