核心数据 - NSFetchrequest获取实际数据量的两倍

时间:2014-01-21 19:53:16

标签: ios core-data

以下代码中的NSFetchRequest以数倍的数据获取数据。例如,第一次调用该方法时有3作为数组计数,下一次它变为6接下来9,依此类推。但是在数据库中,计数仍为3.为什么会发生这种情况?

// the method is called in viewDidLoad

- (void) create {

[orderList removeAllObjects];
  NSError * error;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"OrderList"
                                          inManagedObjectContext:context];
for (int addOrd = 0; addOrd < orderMainArray.count; addOrd++) {

    GetOrders *getOrd = (GetOrders*)[NSEntityDescription insertNewObjectForEntityForName:@"GetOrders" inManagedObjectContext:context];
    OrderList *ordList = (OrderList*)[NSEntityDescription insertNewObjectForEntityForName:@"OrderList" inManagedObjectContext:context];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];



    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"orderId contains[cd] %@", [[orderMainArray objectAtIndex:addOrd] objectForKey:@"orderId"]];
    [fetchRequest setPredicate:predicate];
    [fetchRequest setEntity:entity];

      NSLog(@"\n \n \n count for same data = %d", [context countForFetchRequest:fetchRequest error:&error]);

    if ([context countForFetchRequest:fetchRequest error:&error] ==0 ) {

        // all data is saved here 

        [getOrd addOrderListObject:ordList];
        if ([context save:&error]) {
            NSLog(@"The save was successful! %@", ordList.orderId);

        }
        else {
            NSLog(@"The save wasn't successful: %@", [error userInfo]);
        }
        }
    }
    NSFetchRequest *fetchRequest1 = [[NSFetchRequest alloc] init];
    [fetchRequest1 setEntity:entity];

    orderList = [[context executeFetchRequest:fetchRequest1 error:&error] mutableCopy]; // array count increases every time the method is called 


}

2 个答案:

答案 0 :(得分:1)

每次拨打insertNewObjectForEntityForName:InManagedObjectContext:时,我都在创建和添加新对象。所以改变了,现在工作正常。

答案 1 :(得分:0)

代码混合了获取请求和新托管对象的插入。 在for循环的每次迭代中插入一个OrderList NSManagedObject和一个GetOrder NSManagedObject。根据您的描述,我假设orderMainArray.count的值为3.