2014-12-26 33 views
0

在我的模型上設置了NSString屬性後,它立即返回爲Null。奇怪的是設置任何typedef屬性都會被保留(即NSInteger)。代碼如下。我也通過GCD運行這種方法 - 但我評論說這不是&它沒有改變任何東西。我在模型中也有一些NSCoding方法,但註釋掉代表並沒有改變任何東西。Model屬性在從JSON中設置後立即解除分配

從字面上看,一切正常,包括訪問JSON字典和NSLogging結果,除了設置我的模型屬性不是typedef。

更新

分配任何的NSString [字典valueForKey:@ 「如first_name」]返回Null所以顯然這是訪問所述字典中的問題。

更新2

登錄字典後,我注意到,一些keyss沒有「」,有的值不必「」。我使用as_json從軌,並在郵遞員的Chrome擴展程序,這並不發生

{ 
available = 1; 
boxing = 0; 
certificates = ""; 
city = A; 
"created_at" = "2014-12-14T07:23:35.445Z"; 
description = "Short description"; 
"drivers_license" = CA12345; 
"drivers_license_expiration" = "12/20"; 
"drivers_license_state" = CA; 
email = "[email protected]"; 
"facebook_id" = ""; 
"first_name" = TEsty; 
gender = ""; 
id = 1; 
"last_name" = Again; 
latitude = "<null>"; 
longitude = "<null>"; 
password = g; 
pilates = 0; 
"reset_password_token" = "<null>"; 
running = 0; 
strength = 0; 
"updated_at" = "2014-12-25T08:42:27.122Z"; 
yoga = 0; 
} 

.h文件中

@interface FSTrainer : NSObject <NSCoding> 

@property (nonatomic) NSInteger id; 
@property (nonatomic, strong) NSString* first_name; 
@property (nonatomic, strong) NSString* last_name; 

- (id) init; 
- (id) initWith:(NSMutableDictionary *)dictionary; 

等。

.m文件

-(id)init{ 
self = [super init]; 
if (!self) return nil; 
return self; 
} 

- (id) initWith:(NSMutableDictionary *)dictionary 
{ 
self = [super init]; 
if (!self) return nil; 


    if ([dictionary valueForKey:@"id"] != [NSNull class]) 
    {self.id = [[dictionary valueForKey:@"id"] integerValue];} 

    if ([dictionary valueForKey:@"first_name"] != [NSNull class]) 
    { 
     [self setFirst_name:[dictionary valueForKey:@"first_name"]]; 

     NSLog(@"%@", [dictionary objectForKey:@"first_name"]); 
     NSLog(@"%@", [dictionary valueForKey:@"first_name"]);} 
     //Both NSLogs print out the correct names 

    if ([dictionary valueForKey:@"last_name"] != [NSNull class]) 
    {self.last_name = [valueForKey objectForKey:@"last_name"];} 

etc.... 

return self; 
} 

這被叫做:

dispatch_async(dispatch_get_global_queue(0, 0), ^{ 
     [self computationForRails]; 
    }); 

而且功能

-(void)computationForRails{ 
... 
    FSTrainer* currentTrainer = [[FSTrainer alloc] initWith:[tempdict valueForKey:@"data"]]; 
    //sol-added JNKeychian 
    [JNKeychain saveValue:currentTrainer forKey:@"current_trainer"]; 
} 

凡tempdict等於(數據字典中的一個鍵)

id jsonObject = [NSJSONSerialization JSONObjectWithData: data 
                options: NSJSONReadingMutableContainers 
                 error: &error]; 

當我後來訪問模型(該模型我救不設置其性能也是正確的,這是在應用程序崩潰

FSTrainer* current_trainer = [JNKeychain loadValueForKey:@"current_trainer"]; 
    NSString* trainerName = current_trainer.first_name; 
+0

你怎麼知道的屬性得到釋放?你能表明這項工作嗎? –

+0

@AaronBrager它沒有被釋放。當我還在調試問題時,我發佈了這個消息。該物業從未被設置。我試圖設置一個臨時NSString的dicitonary值,它返回null。但是當我nslog鍵(first_name)的值時,它會正確註銷。我假設它是這個字典設置的方式。看到我的更新,我會嘗試更新標題 – DaynaJuliana

+0

你是什麼意思?屬性設置者是「空白」方法。你能告訴你如何試圖訪問變量嗎? –

回答

1

替換代碼

[self setFirst_name:[dictionary valueForKey:@"first_name"]]; 

與此代碼

[self setFirst_name:[NSString stringWithFormat:@"%@",[dictionary valueForKey:@"first_name"]]]; 

它爲我工作

+0

節日快樂!不幸的是,這並沒有奏效,但是當我注意到它註銷了正確的值時。這很奇怪。 – DaynaJuliana

+0

@DaynaJuliana - 你可以分享你的代碼給我嗎?所以,我可以通過調試你的代碼來檢查問題。 –

+0

實際上,這確實適用於其他奇怪的值。問題是我如何訪問它們。謝謝 ! – DaynaJuliana