在Xcode中从核心数据填充数组

时间:2014-03-18 11:42:54

标签: ios objective-c core-data nsarray

我正在尝试使用从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开发的新手。

提前谢谢

3 个答案:

答案 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

enter image description here

答案 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;

}