2014-04-04 104 views
1

我工作的一个应用程序与核心数据,Restkit并有一个简单的管理对象,如下的访问的NSString财产 -管理对象

@interface MyManagedObject : NSManagedObject 
@property (nonatomic, strong) NSString *timeZone; 
@end 

我的问题是,当我尝试访问myManagedObj.timeZone ,我得到的值是 -

US/Pacific ({ 
    HTTP =  { 
     request =   { 
      URL = "https://myapp.com/getTimeZone"; 
      headers =    { 
       Accept = "application/json"; 
       "Accept-Language" = "en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5"; 
       "Content-Type" = "application/json; charset=utf-8"; 
       "User-Agent" = "MyApp/204 (iPhone Simulator; iOS 7.0.3; Scale/2.00)"; 
      }; 
      method = POST; 
     }; 
     response =   { 
      URL = "https://myapp.com/getTimeZone"; 
      headers =    { 
       "Access-Control-Allow-Origin" = "*"; 
       "Alternate-Protocol" = "443:quic"; 
       "Cache-Control" = "no-cache"; 
       "Content-Type" = "application/json"; 
       Date = "Fri, 04 Apr 2014 19:11:09 GMT"; 
       Expires = "Fri, 04 Apr 2014 19:11:09 GMT"; 
       Vary = "Accept-Encoding"; 
      }; 
     }; 
    }; 
    mapping =  { 
     collectionIndex = 2955515963; 
     rootKeyPath = "data.user_profile"; 
    }; 
}) 

我期待的值就是“美国/太平洋”,不知道为什么HTTP请求/响应追加到它。如果我终止应用程序并重新启动它,我只会得到'美国/太平洋'。不知道为什么?

感谢您的任何帮助。

的代码来设置时区是 -

NSURLRequest *request = [[RKObjectManager sharedManager] requestWithObject:self method:RKRequestMethodPOST path:[NSString stringWithFormat:@"/getTimeZone/%@", loginTypeString] parameters:params]; 
[self prioritizedRequestOperationWithRequest:request 
          queuePriority:NSOperationQueuePriorityVeryHigh 
          threadPriority:1 
           targetObject:self 
            success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
             myManagedObject = (MyManagedObject *)[mappingResult firstObject]; 
            } 
            failure:^(RKObjectRequestOperation *operation, NSError *error, UCNetworkRequestError *ucError) { 
            } 
         useManagedRequest:YES]; 

下面是MyManagedObject响应映射 -

+ (RKObjectMapping *)responseMapping { 
    RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName:@"MyManagedObject" inManagedObjectStore:[RKObjectManager sharedManager].managedObjectStore]; 
    [entityMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"timeZone"]]; // array of strings 
    return entityMapping; 
} 
+0

你可以在设置youObject.timeZone时共享代码吗? – Krivoblotsky

+0

更新了问题以共享数据设置的代码。 – Subhash

回答

0

您所看到的日志是从RestKit映射时使用代理对象。它实际上并没有保存到商店中,它只是在映射过程中使用。您不必担心,因为您发送给代理的任何消息都将转发到真实的基础项目(本例中为纯字符串) - 除了描述之外,因此您会看到详细的输出。

当您终止应用程序时,您正在从数据存储中重新获取该项目,以便获取真正的基础数据,然后减去代理。

+0

谢谢。有道理。 – Subhash

+0

但是,我不明白这一点:MyManagedObject实例存储在一个NSSet。因此,当我尝试使用'[NSPredicate predicateWithFormat:@“timeZone ==%@”,@“US/Pacific”]对文件集进行归档时,结果集合就是空的!所以我必须实现的解决方法是使用forloop来迭代NSSet,然后将isEqualToString与循环中的每个set对象进行比较。 – Subhash

+0

使用'mappingResult'中返回的托管对象?改为在数据存储上的提取请求中运行谓词。 – Wain