2012-08-03 89 views
-2

我想獲得一個數組,我的數據充滿了,當我運行這個雖然在調用數組時我不斷收到一個BAD_ACCESS錯誤,但是我沒有在這裏包含這個數組,嘗試只是將它調用到日誌,仍然得到BAD_ACCESS錯誤。該數組存儲在包含一個數字的一​​個鍵的字典中。我不確定我在這裏做錯了什麼。從NSDictionary中檢索NSArray

ISData *is = [[ISData alloc] init]; 
NSDictionary *dic = [is getData:@"right" : isNumber]; 

NSArray *array = [[NSArray alloc] initWithArray:[dic valueForKey:@"2"]]; 

NSString *out = [array objectAtIndex:0]; 

怎樣詞典創建:

NSNumber* key = [NSNumber numberWithInt:isNumber]; 
NSArray *values = [NSArray arrayWithObjects:[NSString stringWithUTF8String:name], [NSString stringWithUTF8String:desc], [NSString stringWithUTF8String:intent], nil]; 

[dic setObject:values forKey:key]; 
+1

'NSDictionary * dic = [is getData:@「right」:isNumber];'那條線應該是幹什麼的?據我所知,這根本不是有效的語法 – 2012-08-03 17:45:16

+0

我不知道ISData是什麼... – NSPunk 2012-08-03 17:47:19

+3

@DanF:這是有效的語法。參數在ObjC中不需要名稱。這個選擇器看起來像'-getData ::'。儘管在現代的ObjC中它是非慣用的,除了在不尋常的利基用途。 – 2012-08-03 17:48:59

回答

0

您不會說崩潰的確切位置,而且您沒有明顯的崩潰錯誤,因此很難診斷您的實際問題。這可能是一個內存管理的事情,超出了你所提供的代碼。但有兩件事情是怎麼回事是可疑:

  1. 你不應該有一個光禿禿的[MyClass alloc]沒有-init電話。你的init應該調用super的init,它負責設置新的對象。

  2. 您的-valueForKey:應該是-objectForKey:。在這種情況下,差異可能不重要,但前者用於「KVC」編碼,而您並未使用該編碼。如果您將其設置爲對象,請將其作爲對象。

  3. 您的@"2"作爲字典的關鍵字不匹配您的輸入,這是一個NSNumber。 NSNumbers不是字符串版本的數字,所以你不可能在那裏找到任何值。相反,使用相同的[NSNumber numberWithInt:2]模式。

+0

我覺得他在按鈕上的權利 – 2012-08-03 17:50:40

+0

這是手工輸入的,所以我忘了輸入init,但是謝謝你指出。 – ios85 2012-08-03 17:52:52

0

這是最有可能的是你的數組爲空。您可以嘗試打印NSLog(@"count = %d", array.count);以查看是否屬實。

如果你的dic是在第二塊代碼中設置的,那麼NSDictionary *dic = [is getData:...]是什麼東西在第一個塊?

有沒有一個原因,你不能直接設置你的數組?只有一個密鑰時,你有使用字典的理由嗎?