Core data RESTKit:检测已获取对象中的属性更改

Core data RESTKit:检测已获取对象中的属性更改,core-data,restkit-0.20,Core Data,Restkit 0.20,iOS 7,RESTKit 0.20.X 我使用以下代码将本地核心数据对象与新的和修改的获取对象进行比较,以确定属性的所有值都发生了哪些变化。对于已修改的,我有以“M”结尾的瞬态属性。i、 e.实际属性:startDate和瞬态:startDateM。我循环遍历已获取对象的数组,如果属性值已更改,则标记transient属性 结果是断断续续的。有时,循环会标记已更改的正确属性;但是,循环通常会将未修改的属性标记为已修改,或者从未检测到已修改的某些或任何属性。我可以查看Charles日志并访问数据

iOS 7,RESTKit 0.20.X

我使用以下代码将本地核心数据对象与新的和修改的获取对象进行比较,以确定属性的所有值都发生了哪些变化。对于已修改的,我有以
“M”
结尾的瞬态属性。i、 e.实际属性:
startDate
和瞬态:
startDateM
。我循环遍历已获取对象的数组,如果属性值已更改,则标记transient属性

结果是断断续续的。有时,循环会标记已更改的正确属性;但是,循环通常会将未修改的属性标记为已修改,或者从未检测到已修改的某些或任何属性。我可以查看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];
}
RKManagedObjectRequestOperation*操作=[[RKManagedObjectRequestOperation alloc]initWithRequest:request-responseDescriptors:@[responseDescriptor]];
operation.managedObjectContext=self.objectManager.managedObjectStore.mainQueueManagedObjectContext;
operation.managedObjectCache=appDelegate.managedObjectStore.managedObjectCache;
operation.savesToPersistentStore=否;
[操作setCompletionBlockWithSuccess:^(RKObjectRequestOperation*操作,RKMappingResult*映射结果){
NSSet*UpdateObjects=[self.managedObjectContext UpdateObjects];
NSArray*_updateobjects=updateobjects.allObjects;

对于(int i=0;i你为什么要这样做?你的实际目标是什么?你能使用自定义访问器方法/KVO吗?原因:UserA发布一个对象。UserB在另一个设备上修改该对象并放置。UserA GET是修改过的对象。我需要向UserB显示UserA更改了对象中的所有属性。我从未使用过自定义访问器方法/KVO。这是一种更好的方法吗?你能用一些代码示例详细说明一下吗?谢谢。“我需要向UserB展示UserA更改了对象中的哪些属性”…UserB当然拥有发布在其本地数据库中的原始数据,该数据将用于与新的GET对象进行比较。好吧,您拥有的代码看起来不错。如果没有查看源数据和更新上下文所认为的内容的日志,很难说为什么它可能不起作用。特别是如果您看不到任何模式。否则可能是som映射中的错误意味着某些键未被处理。我应该尝试KVO吗?这是进入模型(NSManagedObject子类)还是进入
操作setCompletionBlockWithSuccess…
block?有任何示例吗?