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

时间:2014-06-11 03:42:07

标签: core-data restkit-0.20

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];
}

我做错了什么?检测每个对象中属性更改的替代方法/最佳实践是什么?

0 个答案:

没有答案