在我的模型上設置了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;
你怎麼知道的屬性得到釋放?你能表明這項工作嗎? –
@AaronBrager它沒有被釋放。當我還在調試問題時,我發佈了這個消息。該物業從未被設置。我試圖設置一個臨時NSString的dicitonary值,它返回null。但是當我nslog鍵(first_name)的值時,它會正確註銷。我假設它是這個字典設置的方式。看到我的更新,我會嘗試更新標題 – DaynaJuliana
你是什麼意思?屬性設置者是「空白」方法。你能告訴你如何試圖訪問變量嗎? –