在iphone的这一行中,“message”的确切含义是什么?

时间:2010-09-02 04:20:18

标签: iphone

NSDictionary *story = [stories objectAtIndex: indexPath.row];
cell.text=[NSString stringwithFormat:[story objectForKey@"message];

我不知道究竟“消息”包含什么(objectForKey @“消息”的含义是什么)

编辑代码

NSString *key =[appDelegate.books objectAtIndex:indexPath.row];
    //dict y=@"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]);

为什么我的代码崩溃

3 个答案:

答案 0 :(得分:0)

@“message”是存储在NSDictionary对象中的值的键。第一行声明了一个名为故事的NSDictionary,它似乎来自一个数组。

如果要查找为密钥存储的值:@“message”,请考虑使用:

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

运行并检查控制台以查看输出。如果你正在使用它,XCode中的(SHIFT + COMMAND + Y)将调出控制台。如果您不熟悉NSArrays / NSDictionaries,请查看Apple的文档。

我只是猜测这一切,因为这是一个非常有限的代码示例。当您提出问题时尝试提交更多代码,以便观众可以更好地了解您的问题。

答案 1 :(得分:0)

这是键值编码的一个例子,如果您有兴趣,可以在Apple开发网站上获得大量信息:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/KeyValueCoding/KeyValueCoding.html

答案 2 :(得分: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的@ strings。

在C#中,字典有一种特殊的语法,因此它变为:

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

如果您是新手,可能会遇到的一个重要问题是原生类型的问题。

在Java中,为以前的字典添加一个int:

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

因为基本类型(int,char / short,byte,boolean)不是真正的对象。 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!".