2014-01-21 48 views
0

NSFetchRequest在下面的代码中获取的数据数量是倍数倍。示例我有3个数组作为第一次调用该方法的次数,下一次变为6次9等。但在数据库中,计数仍然为3.为什么会发生这种情况?核心数据 - NSFetchrequest获取两倍数据的实际数量

// 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 


} 
+1

每次调用'insertNewObjectForEntityForName:InManagedObjectContext:'你正在创建和添加新对象... – Wain

+0

你想达到什么目的? –

+0

@Wain - 谢谢你......你能回答同样的问题吗?我想把它标记为这个问题的答案。 –

回答

0

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

0

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