核心数据,NSMutableArray包含NSManagedObject,在插入数组的第一个NSManagedObject后,对象变为nil

时间:2012-05-03 09:18:20

标签: sqlite core-data memory-management nsmutablearray nsmanagedobject

我使用coreData插入一个NSManagedObject数组,在我成功插入第一个对象后,NSMutableArray的第二个对象变为nil为什么会这样? 这是我的代码的快照:

+ (void)insertCategoryUsingCategoryArray:(NSMutableArray *)categoryArray
{
    if(!categoryArray)
        return;
    for (int i=0;i<[categoryArray count]; i++) {
        DataCategory *temp=(DataCategory *)[categoryArray objectAtIndex:i];

        DataCategory *categoryInfo=(DataCategory *)[NSEntityDescription insertNewObjectForEntityForName:@"DataCategory" inManagedObjectContext:_sing.managedObjectContext];

        [categoryInfo setCategoryId:temp.categoryId];
        [categoryInfo setName:temp.name];
        [categoryInfo setImgSrc:temp.imgSrc];

        NSError *error;
        if (![_sing.managedObjectContext save:&error]) {
            NSLog(@"An error occured while saving! shit : %@", [error localizedDescription]);
        }
        categoryInfo=nil;
    }
}

当我进入插入函数i调试categoryArray时,所有对象都在那里,循环后第一次temp由于某种原因变为零,有人知道为什么吗?

1 个答案:

答案 0 :(得分:0)

categoryArray不应该是此方法的参数。在您的设置中,该方法将数组作为变量传递给该方法。除非你返回一些东西,否则一旦离开方法,这个数组将包含什么是不可预测的。

相反,你应该有一个由视图控制器管理的ivar。用

初始化ivar
categoryArray = [NSMutableArray array];
viewDidLoad

然后使用此变量并且不将数组传递给方法。

PS:你可以通过消除invective来改善你的编程风格。; - )