2012-12-19 10 views
5

मान लीजिए मैं jsonRestKit v0.20.x: एक साथ मानचित्रण (क्षणिक) वस्तु और (कोर डेटा) प्रबंधित वस्तु

{ "begin_session" : { "info" : "this is some info" } } 

साथ सर्वर के लिए एक अनुरोध भेजने के लिए चाहता हूँ और मैं प्रतिक्रिया json में उम्मीद :

{ "token" : "this is a token", "a_objects" : [ 
    { "name" : "name of first a_object", "b_objects" : [ 
     { "name" : "name of first b_object", "type" : "some type value", "id" : "123" }, 
     { "name" : "name of second b_object", "type" : "some other type value", "id" : "124" } 
    ], "id" : "id of first a_object" }, 
    { "name" : "name of second a_object", "b_objects" : [ 
     { "name" : "name of first b_object", "type" : "some type value", "id" : "123" }, 
     { "name" : "name of third b_object", "type" : "some third type value" , "id" : "125" }, 
    ], "id" : "id of second a_object" } 
] } 

मैं "टोकन" क्षणिक स्टोर और कोर डेटा में a_objects बनाए रखना चाहते। यह कैसे मैं पूरी प्रक्रिया क्या करना चाहिए है?

@interface LoginToken : NSObject 
    @property (nonatomic, copy) NSString *token; 
@end 

@interface AObject : NSManagedObject 
    @property (nonatomic, retain) NSString *name; 
    @property (nonatomic, retain) NSSet *bObjects; 
    @property (nonatomic, retain) NSString *aObjectId; 
@end 

@implementation AObject 
    @dynamic name; @dynamic bObjects; @dynamic aObjectId; 
@end 

@interface BObject : NSManagedObject 
    @property (nonatomic, retain) NSString *name; 
    @property (nonatomic, retain) AObject *aObject; 
    @property (nonatomic, retain) NSString *type; 
    @property (nonatomic, retain) NSString *bObjectId; 
@end 

@implementation BObject 
    @dynamic name; @dynamic aObject; @dynamic type; @dynamic bObjectId; 
@end 

ये अनुरोध पैरामीटर:

NSDictionary *params = @{"begin_session":@{@"info":@"this is some info"}}; 

तब मैं मैपिंग की स्थापना:

RKObjectMapping *tokenMapping = [RKObjectMapping mappingForClass:[LoginToken class]]; 
[tokenMapping addAttributeMappingsFromArray:@[@"token"]]; 
RKResponseDescriptor *tokenResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:tokenMapping pathPattern:nil keyPath:@"token" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

RKEntityMapping *bObjectMapping = [RKEntityMapping mappingForEntityForName:@"BObject" inManagedObjectStore:objectManager.managedObjectStore]; 
[bObjectMapping addAttributeMappingsFromDictionary:@{@"name":@"name",@"type":@"type", @"id":@"bObjectId"}]; 
bObjectMapping.identificationAttributes = @[@"bObjectId"]; 

RKEntityMapping *aObjectMapping = [RKEntityMapping mappingForEntityForName:@"AObject" inManagedObjectStore:objectManager.managedObjectStore]; 
[aObjectMapping addAttributeMappingsFromDictionary:@{@"name":@"name",@"id":@"aObjectId"}]; 
[aObjectMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"b_objects" toKeyPath:@"bObjects" withMapping:bObjectMapping]]; 
aObjectMapping.identificationAttributes = @[@"aObjectId"]; 

मान लीजिए objectManager एक सही ढंग से कॉन्फ़िगर RKObjectManager है पहले, मैं वस्तुओं की स्थापना की। मैं प्रतिक्रिया वर्णनकर्ता की स्थापना:

RKResponseDescriptor *tokenResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:tokenMapping pathPattern:nil keyPath:@"token" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

RKResponseDescriptor *aObjectResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:aObjectMapping pathPattern:nil keyPath:@"a_objects" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

[objectManager addResponseDescriptorsFromArray:@[tokenResponseDescriptor, aObjectResponseDescriptor]]; 

और अंत में मैं अनुरोध करना होगा:

[objectManager getObjectsAtPath:@"path" parameters:params success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
    LoginToken *token = [mappingResult firstObject]; // use this token transiently 
    // coredata objects are auto saved 
} failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    // handle error 
}]; 

क्या मैं अगर यह है के बारे में पता करने की आवश्यकता है, वास्तव में है, करने का सही तरीका कर दो? इसके अलावा, मैं कैसे AObject को BObject से व्युत्क्रम संबंध सेट ... क्या ज़रूरत है?

उत्तर

0

जब तक आपके CoreData फ़ाइल संबंध ठीक से विन्यस्त (जो इसे अपने वस्तु हेडर फाइल के आधार पर सही लग रहा है) तो व्युत्क्रम संबंध नक्शाकार द्वारा नियंत्रित किया जाता है के रूप में। अन्यथा, यह काम करना चाहिए है।

ध्यान दें कि टोकन वस्तु CoreData में रूप में अच्छी तरह कायम किया जाएगा ताकि आप उन्हें हटाने पड़ सकता है वांछित व्यवहार है।

संबंधित मुद्दे