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]);
为什么我的代码崩溃
答案 0 :(得分:0)
@“message”是存储在NSDictionary对象中的值的键。第一行声明了一个名为故事的NSDictionary,它似乎来自一个数组。
如果要查找为密钥存储的值:@“message”,请考虑使用:
NSLog(@"Value Of message: %@", cell.text);
运行并检查控制台以查看输出。如果你正在使用它,XCode中的(SHIFT + COMMAND + Y)将调出控制台。如果您不熟悉NSArrays / NSDictionaries,请查看Apple的文档。
我只是猜测这一切,因为这是一个非常有限的代码示例。当您提出问题时尝试提交更多代码,以便观众可以更好地了解您的问题。
答案 1 :(得分:0)
这是键值编码的一个例子,如果您有兴趣,可以在Apple开发网站上获得大量信息:
答案 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!".