2013-07-22 60 views
9

在我的iOS應用程序中,我試圖更新數據庫中的用戶信息(使用Stackmob),但我一直收到「無法識別的選擇器發送到實例。iOS&Stackmob - [NSNull length]:發送到實例的無法識別的選擇器

- (IBAction)save:(UIButton *)sender { 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"User"]; 
NSPredicate *predicte = [NSPredicate predicateWithFormat:@"username == %@", self.username]; 
[fetchRequest setPredicate:predicte]; 

[self.managedObjectContext executeFetchRequest:fetchRequest onSuccess:^(NSArray *results) { 

    NSManagedObject *todoObject = [results objectAtIndex:0]; 
    [todoObject setValue:@"[email protected]" forKey:@"email"]; 

    [self.managedObjectContext saveOnSuccess:^{ 
     NSLog(@"You updated the todo object!"); 
    } onFailure:^(NSError *error) { 
     NSLog(@"There was an error! %@", error); 
    }]; 

} onFailure:^(NSError *error) { 

    NSLog(@"Error fetching: %@", error); 

}]; 
} 

下面是完整的錯誤我得到:

-[NSNull length]: unrecognized selector sent to instance 0x1ec5678 

2013-07-21 12:01:25.773 [29207:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[NSNull length]: unrecognized selector sent to instance 0x1ec5678' 

在此先感謝。

+1

一些你得到無值或對象,你試圖設置零,你爲什麼得到這個錯誤。檢查befor setValue是否爲零。 –

+0

[ - \ [NSNull length \]的可能重複:無法識別的選擇器發送到...內存泄漏?](http://stackoverflow.com/questions/16607960/nsnull-length-unrecognized-selector-sent-to-一個內存泄漏) – borrrden

+0

你可以打印self.username,看看它包含什麼? – satheeshwaran

回答

42

我想可能是因爲你的self.username是空的。請注意,如果你是從JSON獲取用戶名的數據,則無法使用 if(username){...}

if(![username isKindOfClass:[NSNull class]]) 

避免空數據,因爲JSON解釋器將生成一個NSNull對象。

+2

雖然這個解決方案的工作原理,但我發現了一個更好的解決方案在這裏:http://stackoverflow.com/questions/16607960/nsnull-length-unrecognized-selector-sent-to-a-memory-leak/16610117 –

+0

@पवन雖然可能在某些情況下工作,在生產中使用這是一個非常危險的策略。 – dmur

+0

但JSON與此有什麼關係? – user102008

相關問題