我知道我读的数据是正确的,当我以前添加没有更新功能的数据时,所有数据都插入到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返回
>如果发生错误,则为零,并且>如果找不到匹配的对象,则为空数组.
总结以上是内存溢出为你收集整理的ios – 执行对CoreData的添加/更新的问题全部内容,希望文章能够帮你解决ios – 执行对CoreData的添加/更新的问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)