无法访问CoreData对象属性

时间:2015-09-15 11:06:36

标签: ios objective-c core-data

我正在尝试使用coreData中的fetched对象的图像在collectionView中设置单元格的大小。 当我尝试访问对象的属性时,它总是为零。尝试访问属性之前和之后数据都是错误的。我可以设置:[fetchRequest setReturnsObjectsAsFaults:NO];,但这不是正确的方法。

我尝试像这样得到GalleryItem的图像:

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    CGSize retval;
    NDGGalleryItem* galleryItem2 = [_gallery.allGalleryItems objectAtIndex:indexPath.row];
    UIImage* image = galleryItem2.image;
    retval.height = image.size.height/5 + 140;
    retval.width = image.size.width/5;

    return retval;
}

奇怪的是,当我将简单的迭代通过元素时,所有属性都有适当的值:

 for (NDGGalleryItem *galleryItem in _gallery.allGalleryItems) {
        NSLog(@"Name = %@", galleryItem.name);
        image = galleryItem.image;
    }

请帮助。

我的课程:

GalleryItem

@interface NDGGalleryItem : NSManagedObject

@property (nonatomic, retain) UIImage* image;
@property (nonatomic, retain) NSString* name;
@property (nonatomic, retain) NSArray* tags;

@end

GalleryDataManager - 进行fetchrequest的那个

-(NSArray*)getAllGalleryItems {
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"NDGGalleryItem"
                                              inManagedObjectContext:context];
    NSError *error;
    [fetchRequest setEntity:entity];
   //[fetchRequest setReturnsObjectsAsFaults:NO];
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

    if ([fetchedObjects count]) {
        return fetchedObjects;
    }
    else {
        NSLog(@"No gallery items found in CoreData");
        ALog(@"%@",error);
        return nil;
    }
}

图库 - 存储数组_allGalleryItems

@interface NDGGallery : NSObject

@property (nonatomic) NSArray* allGalleryItems;
@property (nonatomic) NDGGalleryDataManager* dataManager;

@property (nonatomic, weak) id<NDGGalleryProtocol> delegate;

@end

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题。

您的假设是正确的,因为错误的数据不是错误,并且在访问该属性后应该可以访问它们。

在我的情况下,问题是我使用了两个上下文。在这种情况下,导入对象的上下文不是我在这种情况下获取对象的上下文。

注意你使用sme上下文或者通过调用save()将更改传播给它们,或者通过调用refreshObject(,merge:true)强制它们刷新