2011-07-25 154 views
0

我想使用下面的代碼來加載一個UIButton和UITextField的信息基於UISegmentedControl的當前段被點擊,但它正在導致SIGABRT崩潰。 下面是代碼:objectForKey崩潰? iOS

- (void)updateInfo { 

NSLog(@"count1:%d", [self.accounts count]); 

[self saveInfo]; 

NSLog(@"count2:%d", [self.accounts count]); 

NSDictionary *dict = [self.accounts objectAtIndex:0]; 
NSData *imageData = [dict objectForKey:@"ProfileImage"]; 
UIImage *imageProfile = [UIImage imageWithData:imageData]; 
[image1 setImage:imageProfile]; 

NSDictionary *dict2 = [self.accounts objectAtIndex:1]; 
NSData *imageData2 = [dict2 objectForKey:@"ProfileImage"]; 
UIImage *imageProfile2 = [UIImage imageWithData:imageData2]; 
[image2 setImage:imageProfile2]; 

if ([self.accounts objectAtIndex:accountSC.selectedSegmentIndex] != nil) { 
    NSDictionary *dict = [self.accounts objectAtIndex:accountSC.selectedSegmentIndex]; 
    //NSString *name = [dict objectForKey:@"Name"]; 
    NSString *name = [accountSC titleForSegmentAtIndex:accountSC.selectedSegmentIndex]; 
    [Name setText:name]; 
    NSData *imageData = [dict objectForKey:@"ProfileImage"]; 
    UIImage *imageProfile = [UIImage imageWithData:imageData]; 
    [pictureButton setImage:imageProfile forState:UIControlStateNormal]; 
} 
else { 
    Name.text = nil; 
    [pictureButton setImage:nil forState:UIControlStateNormal]; 
} 

} 

第一&第二大的代碼塊是暫時的,因爲我想看看基於不同objectAtIndex號碼的UIImage的。

這裏是控制檯崩潰日誌:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString objectForKey:]: unrecognized selector sent to instance 0x2cc08' 

有什麼理由這個可以發生?我是否需要發佈我正在使用的其他代碼?

我真的需要幫助,我一直拉我的頭髮!

編輯1: 我正在使用此代碼,你也在談論isKindOfClass吧? 反正這是代碼:

NSDictionary *dict = [self.accounts objectAtIndex:1]; 
if ([dict isKindOfClass:[NSDictionary class]]) { 
    NSLog(@"YES"); 
} 
else { 
    NSLog(@"NO"); 
} 
現在

林測試...

回答

3

你發送objectForKey:NSString對象,特別是一個你已經在@"..."形式直接輸入到你的代碼的某個地方,而比以編程方式創建的程序(或已經爲您編程創建的程序)。有人正在將字典以外的東西放入self.accounts

+0

是啊,我這樣做的話,因爲我來說,我需要做一些具體的事情。我需要添加一個對象作爲一個虛擬爲了我的應用程序工作。後來我用NSDictionary替換它。我將如何修改我的代碼才能使其工作? –

+0

這個問題需要更多關於代碼的概述,因爲你顯然已經有一個狀態轉換到另一個狀態,並不是每個人都知道這個動作。然而,一種解決方案可以立即在本地運行,可能是當你從'self.accounts'中取出對象時,檢查它的類型(例如'if([dict isKindOfObject:[NSDictionary class]])')來查看字符串到字典替換已經發生。 – Tommy

+0

此外,如果您需要我發佈更多的代碼,請讓我知道。 –

1

的NSDictionary:objectForKey:

objectForKey:返回如果沒有值與密鑰相關聯用鍵,或零相關聯的值。

key:標識值的字符串。如果爲零,則返回零。

(1)你應該知道,關鍵是不是空白

(2)你應該知道的對象不是空白,對象都是同一類型的,因爲你不應該在使用不同種類的類型的NSDictionary。

例如{@"key1":NSString,@"key2":NSNumber} //這是錯誤的示範