以下代码中的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
}
答案 0 :(得分:1)
每次拨打insertNewObjectForEntityForName:InManagedObjectContext:
时,我都在创建和添加新对象。所以改变了,现在工作正常。
答案 1 :(得分:0)
代码混合了获取请求和新托管对象的插入。 在for循环的每次迭代中插入一个OrderList NSManagedObject和一个GetOrder NSManagedObject。根据您的描述,我假设orderMainArray.count的值为3.