iOS 7,RESTKit 0.20.X
我正在使用以下代码将本地Core Data对象与新的和已修改的fetched对象进行比较,以确定所有属性值的更改。我有瞬态属性,以"M"
结尾进行修改。即实际属性:startDate
和瞬态:startDateM
。我遍历已获取对象的数组,如果属性值已更改,我标记瞬态属性。
结果是间歇性的。有时,循环标记已更改的正确属性;但是,通常循环标记属性未被修改为已修改,或从不检测已修改的某些或任何属性。我可以看到Charles日志并且可以访问数据库以了解所有属性被修改的事实。
RKManagedObjectRequestOperation *operation = [[RKManagedObjectRequestOperation alloc]initWithRequest:request responseDescriptors:@[responseDescriptor]];
operation.managedObjectContext = self.objectManager.managedObjectStore.mainQueueManagedObjectContext;
operation.managedObjectCache = appDelegate.managedObjectStore.managedObjectCache;
operation.savesToPersistentStore = NO;
[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSSet *updatedObjects = [self.managedObjectContext updatedObjects];
NSArray *_updatedObjects = updatedObjects.allObjects;
for (int i = 0; i<_updatedObjects.count; i++)
{
if ([[_updatedObjects objectAtIndex:i] isMemberOfClass:[Invite class]])
{
Invite *invite = [_updatedObjects objectAtIndex:i];
NSDictionary *changedValues = [invite changedValues];
NSArray *allKeys = [changedValues allKeys];
invite.startDateM = [allKeys containsObject:@"startDate"] ? [NSNumber numberWithBool:YES] : [NSNumber numberWithBool:NO];
invite.commentM = [allKeys containsObject:@"comment"] ? [NSNumber numberWithBool:YES] : [NSNumber numberWithBool:NO];
invite.locationM = [allKeys containsObject:@"location"] ? [NSNumber numberWithBool:YES] : [NSNumber numberWithBool:NO];
}
else if ([[_updatedObjects objectAtIndex:i] isMemberOfClass:[Activity class]])
{
Activity *activity = [_updatedObjects objectAtIndex:i];
NSDictionary *changedValues = [activity changedValues];
NSArray *allKeys = [changedValues allKeys];
activity.customDataM = [allKeys containsObject:@"customData"] ? [NSNumber numberWithBool:YES] : [NSNumber numberWithBool:NO];
activity.latitudeM = [allKeys containsObject:@"latitude"] ? [NSNumber numberWithBool:YES] : [NSNumber numberWithBool:NO];
activity.locationNameM = [allKeys containsObject:@"locationName"] ? [NSNumber numberWithBool:YES] : [NSNumber numberWithBool:NO];
activity.longitudeM = [allKeys containsObject:@"longitude"] ? [NSNumber numberWithBool:YES] : [NSNumber numberWithBool:NO];
activity.startTimeM = [allKeys containsObject:@"startTime"] ? [NSNumber numberWithBool:YES] : [NSNumber numberWithBool:NO];
activity.activityStatusM = [allKeys containsObject:@"activityStatus"] ? [NSNumber numberWithBool:YES] : [NSNumber numberWithBool:NO];
}
}
NSError *error;
if ([self.managedObjectContext saveToPersistentStore:&error])
{
NSLog (@"******* INBOX OBJECTS SAVED AFTER DETECTING CHANGES**********");
}
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
}];
[operation start];
[operation waitUntilFinished];
}
我做错了什么?检测每个对象中属性更改的替代方法/最佳实践是什么?