2010-09-02 49 views
0
NSDictionary *story = [stories objectAtIndex: indexPath.row]; 
cell.text=[NSString stringwithFormat:[story [email protected]"message]; 

我不KNW什麼exaclty「消息」包含(什麼是objectForKey的意思@「消息」)什麼是「信息」的確切含義在此行iphone

編輯代碼

NSString *key =[appDelegate.books objectAtIndex:indexPath.row]; 
    //dict [email protected]"Name"; 

    NSArray *nameSection = [dict objectForKey:key]; 


    NSDictionary *story = [nameSection objectAtIndex: indexPath.row]; 
    cell.text=[NSString stringwithFormat:[story objectForKey:key]]; 

       NSLog(@"Value Of message: %@", [dict objectForKey:key]); 

爲什麼我的代碼崩潰

回答

0

如果你比較熟悉Java或C#代碼等同於這樣的事:

// Assuming stories is declared as: List<Dictionary<string, string> stories; 

Dictionary<string, string> story = stories[indexPath.row]; 
cell.Text = String.Format(story["message"]); 

在Smalltalk風格(因此Objective-C的太)的面向對象的編程,方法更像消息到其它對象。所以一個好的Objective-C方法名應該像英文句子(Subject-Verb-Object)一樣閱讀。由於這方面的工作與字典(哈希表)看起來是這樣的:

[myDictionary setObject:@"Value" forKey:@"someKey"]; 
[myDictionary objectForKey:@"someKey"]; // == @"Value" 

在Java中這將是:

myDictionary.put("someKey", "Value"); 
myDictionary.get("someKey"); // == "Value" 

注意這個鍵(「someKey」)是如何在Java中的第一個參數例。在Objective-C中,用方法名稱命名參數,因此爲setObject: forKey:。另請注意,在Objective-C字符串中以@符號開頭。這是因爲Objective-C字符串與常規C字符串不同。在使用Objective-C時,你幾乎總是使用Objective-C的@字符串。

在C#中有對字典的特殊語法,使其成爲:

myDictionary["someKey"] = "Value"; 
myDictionary["someKey"]; // == "Value" 

如果你是新的,你可能會遇到的一個重要問題是原生類型的問題。

在Java中爲int添加到您曾經有過做一個解釋:

myDictionary.put("someKey", new Integer(10)); 

因爲基本類型(int,炭/短路,字節,布爾)不是真正的對象。 Objective-C也有這個問題。所以,如果你想要把一個int到字典中必須使用的NSNumber像這樣:

[myDictionary setObject:[NSNumber numberForInt:10] 
       forKey:@"someKey"]; 

你拔出整數像這樣:

NSNumber *number = [myDictionary objectForKey:@"someKey"]; 
[number intValue]; // == 10 

編輯:

您的代碼可能如果你的字符串中有'%'字符,就會崩潰,因爲stringWithFormat就像NSLog一樣,它需要很多參數。因此,如果story [「message」]是「Hello」,那麼它將在沒有額外參數的情況下正常工作,但如果它是「Hello%@」,則需要向stringWithFormat添加一個參數。

NSString *message = @"Hello %@"; 
NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
[dict setObject:message forKey:@"message"]; 

NSString *output = [NSString stringWithFormat:[dict objectForKey:@"message"], @"World!"]; 
// output is now @"Hello World!". 
+0

awesome ...如何深入知識你有..wonderful :-) 謝謝,我希望能像你一樣 – prajakta 2010-09-02 06:22:59

0

@「消息」是存儲在NSDictionary的對象價值的關鍵。第一行聲明一個名爲story的NSDictionary,它似乎來自一個數組。

如果你想找到什麼樣的價值存儲的關鍵:@「消息」,可考慮使用:

NSLog(@"Value Of message: %@", cell.text); 

運行,並檢查控制檯查看輸出。 (SHIFT + COMMAND + Y)在XCode中將調出控制檯,如果這是你正在使用的。如果您不熟悉NSArrays/NSDictionaries,請查看Apple的文檔。

我只是猜測這一切,因爲這是一個非常有限的代碼示例。當您提出問題時,請嘗試提交更多代碼,以便觀衆可以更好地瞭解您的問題。

+0

我認爲COMMAND + SHIFT + R,而不是Y是控制檯。 – 2010-09-02 04:31:36

+0

非常感謝我想要做的是按字母順序對我的tableview行數據進行排序,現在它只是隨機來自xml。但我從來沒有存儲任何東西,所以我不知道如何比較:( – prajakta 2010-09-02 04:34:10

+0

@Alex Gosselin。COMMAND + SHIFT + Y調出控制檯調試器 – 2010-09-02 05:41:27

相關問題