【问题标题】:NSInvalidArgumentException when accessing core data object访问核心数据对象时出现 NSInvalidArgumentException
【发布时间】:2015-03-31 07:37:54
【问题描述】:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Contacts length]:

我正在从 coredata 获取图像,显然图像的格式是 BYTE,所以我将其转换为图像。我正在使用以下代码:

NSFetchRequest * request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Contacts"
                               inManagedObjectContext:context]];

NSError * error = nil;
NSArray * objects = [context executeFetchRequest:request error:&error];
NSData *data1= objects[0];

UIImage *image2 = [[UIImage alloc]initWithData:data1];

怎么办?

【问题讨论】:

    标签: core-data ios5.1


    【解决方案1】:

    [context executeFetchRequest:request error:&error]; 返回一个包含NSManagedObject 实例或NSManagedObject 子类的数组。您告诉编译器该数组包含 NSData 的实例,但事实并非如此。因此,未知选择器方法。

    如果我们假设您将图像数据保存在名为 imageData 的属性中,您的代码将如下所示:

    NSArray * objects = [context executeFetchRequest:request error:&error];
    NSAssert(objects, @"Can't fetch: %@", error);
    if ([objects count] > 0) {
        NSManagedObject *object = objects[0];
        NSData *data = [object valueForKey:@"imageData"];
    }
    
    【解决方案2】:

    你可以使用下面的

    NSManagedObjectContext *context = [self managedObjectContext];
    NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity1 = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:context];
    [fetchRequest setEntity:entity1];
    NSArray * array = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
     NSData * dataBytes = [[array objectAtIndex:0] imgPng];
    image = [UIImage imageWithData:dataBytes];
    

    【讨论】:

    • Aiden 你的回答很有帮助。谢谢
    猜你喜欢
    • 2020-06-28
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多