我有一个NSArray持有一些NSDictionary,每次我保存一个NSDictionary对象并将其添加到NSArray,我发送它到添加/更新功能.
我知道我读的数据是正确的,当我以前添加没有更新功能的数据时,所有数据都插入到CoreData中,但是我想添加更新函数来验证我放的数据.
现在,该函数添加第一个对象,然后一遍又一遍地进入’更新’.
怎么了?
我知道我读的数据是正确的,当我以前添加没有更新功能的数据时,所有数据都插入到CoreData中,但是我想添加更新函数来验证我放的数据.
现在,该函数添加第一个对象,然后一遍又一遍地进入’更新’.
怎么了?
我的代码:
-(void)updateOrAddTrap:(NSMutableDictionary*)trapObject { NSInteger trapID = [trapObject[@"id"] integerValue]; Trap *trapEntity = nil; NSError *error = nil; Boolean success = true; self.fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Trap"]; self.predicate = [nspredicate predicateWithFormat:@"trapID == %d",trapID]; [self.fetchRequest setPredicate:self.predicate]; NSArray *results = [self.managedobjectContext executeFetchRequest:self.fetchRequest error:&error]; if (results == nil) { // Handle error NSLog(@"HANDLE ERROR"); success = false; } else if ([results count] == 0) { // nothing to update,add new trap NSLog(@"nothing TO UPDATE | ADD NEW"); // Create a new record (row) trapEntity = [NSEntityDescription insertNewObjectForEntityForName:@"Trap" inManagedobjectContext:self.managedobjectContext]; } else { NSLog(@"UPDATE EXISTING OBJECT"); trapEntity = results[0]; // There should be only one object for the ID. } if (trapEntity != nil) { // Set properties for new or existing object ... // Int int alarmdistance = [[trapObject objectForKey:ALARMdisTANCE] intValue]; int type = [[trapObject objectForKey:TYPE] intValue]; int roadNumber = [[trapObject objectForKey:ROADNUMBER] intValue]; int trap_id = [[trapObject objectForKey:ID] intValue]; int polys = [[trapObject objectForKey:polyGONS] intValue]; int degrees = [[trapObject objectForKey:degrees] intValue]; [trapEntity setAlarmdistance:[NSNumber numberWithInt:alarmdistance]]; [trapEntity setType:[NSNumber numberWithInt:type]]; [trapEntity setRoadNumber:[NSNumber numberWithInt:roadNumber]]; [trapEntity setTrapID:[NSNumber numberWithInt:trap_id]]; [trapEntity setpolys:[NSNumber numberWithInt:polys]]; [trapEntity setdegrees:[NSNumber numberWithInt:degrees]]; // Boolean BOOL isActive = [[trapObject objectForKey:ISACTIVE] integerValue] == 1 ? YES : NO; [trapEntity setIsActive:[NSNumber numberWithBool:isActive]]; // Float float lat = [[trapObject objectForKey:LAT] floatValue]; float lon = [[trapObject objectForKey:LON] floatValue]; [trapEntity setLat:[NSNumber numberWithFloat:lat]]; [trapEntity setLon:[NSNumber numberWithFloat:lon]]; // Nsstring [trapEntity setDirection:[trapObject objectForKey:DIRECTION]]; [trapEntity setTrapDescription:[trapObject objectForKey:DESCRIPTION]]; [trapEntity setpoly0:[trapObject objectForKey:polyGON_A]]; [trapEntity setpoly1:[trapObject objectForKey:polyGON_B]]; [trapEntity setpoly2:[trapObject objectForKey:polyGON_C]]; [trapEntity setpolygonAzimut1:[trapObject objectForKey:polyGON_A_AZIMUTH]]; [trapEntity setpolygonAzimut2:[trapObject objectForKey:polyGON_B_AZIMUTH]]; [trapEntity setpolygonAzimut3:[trapObject objectForKey:polyGON_C_AZIMUTH]]; // etc. for all properties ... if (![self.managedobjectContext save:&error]) { NSLog(@"HANDLE ERROR WHEN SAVING THE OBJECT"); success = false; } } }
我很高兴知道如何正确更新,因为我现在也错过了这个功能.
解决方法
我不确定这是否是您的问题的原因,但是您检查错误
条件或空结果是错误的.它应该是
条件或空结果是错误的.它应该是
BOOL success = true; Trap *trap = nil; NSArray *results = [self.managedobjectContext executeFetchRequest:self.fetchRequest error:&error]; if (results == nil) { NSLog(@"HANDLE ERROR"); success = false; } else if ([results count] == 0) { NSLog(@"nothing TO UPDATE | ADD NEW"); trap = [NSEntityDescription insertNewObjectForEntityForName:@"Trap" inManagedobjectContext:self.managedobjectContext]; } else { NSLog(@"UPDATE EXISTING OBJECT"); trap = result[0]; // There should be only one object for the ID. } if (trap != nil) { // Set properties for new or existing object ... [trap setTrapID:[NSNumber numberWithInt:trap_id]]; // etc. for all properties ... if (![self.managedobjectContext save:&error]) { NSLog(@"HANDLE ERROR WHEN SAVING THE OBJECT"); success = false; } }
executeFetchRequest返回
>如果发生错误,则为零,并且>如果找不到匹配的对象,则为空数组.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。