2015-07-02 20 views
0

我有一些解析代碼用於從我們的Web服務序列化和反序列化對象,並且在序列化布爾值時遇到了一些問題。如何區分佈爾和CoreData中的NSNumber

序列化看起來是這樣的:

- (NSDictionary *)dictionaryRepresentationWithMapping:(NSDictionary *)mappingDictionary 
{ 
    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc]init]; 

    for (id key in[mappingDictionary allKeys]) 
    { 
     id value = [self valueForKey:key]; 

     if ((value != [NSNull null]) && (![value isKindOfClass:[NSNull class]]) && (value != nil)) 
     { 
      [dictionary setObject:value forKey:mappingDictionary[key]]; 
     } 
    } 

    return [NSDictionary dictionaryWithDictionary:dictionary]; 
} 

的問題是,當我打電話valueForKey:我的NSManagedObject,然後添加這對我的字典我最終值被設置爲,如果我打電話:的

[dictionary setObject:@1 forKey:mappingDictionary[key]]; 

代替:

[dictionary setObject:@YES forKey:mappingDictionary[key]]; 

這意味着,當我把這個到JSON,在下一階段,我發送1而不是真正的服務器。

所以我需要的是一種保留這樣一個事實,即這是一個NSNumber代表一個bool而不是一個數字。我試過要求上課,但我只是回來了NSNumber。有沒有一種方法可以自動保留或失敗,有沒有一種方法可以查閱模型以查看屬性類型的設置?

+0

採取這裏看看HTTP下劃線類:// stackoverflow.com/questions/2518761/get-type-of-nsnumber – Andrea

回答

2

每個實體都存儲在NSEntityDescription它的元數據和NSAttributeDescription。您可以從NSManagedObject訪問它們的方式如下:

//you can put this inside the for loop 
NSAttributeDescription *attributeDescription = self.entity.attributesByName[key]; 
if(attributeDescription.attributeType == NSBooleanAttributeType) { 
    //it is a boolean attribute 
} 
+0

謝謝。這工作完美。 –

0

向服務器發送呼叫時,您可以這樣做: [dict setValue:[NSNumber numberWithBool:YES] forKey:mappingDictionary[key]];; 或者另一種方式,你可以模擬服務器端保持作爲布爾值,在那個時候,只需要發送這樣[dict setValue:YES] forKey:mappingDictionary[key]];

希望它可以幫助

+0

這正確地產生了一個鍵將作爲JSON輸出爲布爾值。然而,我的問題是,我在抽象超類中有一個序列化方法,所以我需要解析來從對象中推斷出類型。 –