【问题标题】:Setting an objectAtKey string from NSDictionary to an NSString in separate class将 NSDictionary 中的 objectAtKey 字符串设置为单独类中的 NSString
【发布时间】:2011-09-15 00:28:36
【问题描述】:

我从 URL(JSON) 获得信息;我很容易用我的字典 [aCategory objectAtKey:@"names"] 中的文本填充我的 tableView 作为单元格标签。现在,根据单元格名称(类别),我想显示另一个表格,该表格将要求最后一个 URL,以便根据该类别获取其余文本。

所以,我希望将[aCategory objectAtKey:@"ID"] 中的 ID 保存到字符串中,并将 URL 放入下一个 viewController 中。我目前正在尝试使用自动生成的 set 方法在目标 viewcontroller 中填充 NSString *ID 来生成它;当我打电话时 [newView setID: [aCategory objectAtKey:@"ID"].

我的新视图控制器的 NSString ID 说它不是空的,但是当我尝试检查它是否确实是“1”或“2”时,我会得到类似 /p2002 的东西。但是,在原始类中,如果我说cell.detailLabelText.text = [aCategory objectAtKey:@"ID"];,标签正确显示“1”“2”“3”..“14”等....

那么,我怎样才能从该键中获取该 ID 到我的其他视图控制器类中?

我知道这是一个有效的 NSCFString,因为我用isClass 和单元格的detailLabelText 测试了它。

【问题讨论】:

  • 回到工作站后请提供一些代码。

标签: iphone ios nsstring nsdictionary


【解决方案1】:

我需要更多细节来确定这一点,但有几点需要注意......

NSString 是所谓的类簇,这基本上意味着它实际上是底层框架在它们之间切换的几个不同类的集合......这意味着如果你正在检查它

isKindOfClass:

您可能无法获得预期的结果。检查 isKindOfClass: in NSObject 的文档。

但是,我不确定是否有什么需要担心的。您看到类似 '\p2002' (第一个字母是 u 吗?)的原因可能只是字符串的当前底层表示。有时,当设备在内存中保存字符串的内容时,它看起来并不完全像“1”或“2”。这并不意味着存在问题:它只是意味着,在更深层次上,字符串在内存中的保存方式是不同的。这就是为什么您的标签可能会显示“2”,但是当您在内存中检查它时,变量看起来会有所不同。

(我猜是因为你处理的是 JSON,所以字符串被编码成一种叫做 UTF-8 的形式。)关键是,一点问题都没有。

真正的问题是,您的新视图控制器是否正确加载?也许在新视图控制器的 viewDidLoad: 方法中,如果你运行以下代码:

NSLog(@"%@", stringID);

这会将 stringID 的值打印到控制台。如果这个数字和前一个视图控制器中表格单元格标签的数字相同,那么一切都应该正确传递。

【讨论】:

  • 非常感谢您的回复,但是,尽管没有明确说明这一点,但我确信这是字符串的表示,因为我非常熟悉高级语言结构之下的层。我很肯定我的视图加载正确,但即使不是,它也在该视图中执行我的检查语句。我只是想要一个明确的答案,或者至少是一个关于如何将字符串从一个类获取到另一个类的明确提示,因为它是原始位置,并且它是从由 JSON 响应字符串填充的字典中提取的。
  • 那么问题是你没有看到如何将字符串数据从firstViewController移动到second?你有几个选项......你可以设置 @property (nonatomic, copy) NSString *stringID;在第二个视图控制器上,然后将值设置为 JSON 字典中的值。这将在第二个视图控制器的内存中创建另一个字符串副本。您还可以创建一个初始化器,例如 -initWithStringID:(NSString *)aStringID;只要您复制或保留对字符串数据的引用,您应该能够轻松地传递值。
  • 是的,正如我在问题中解释的那样,在我的另一个视图控制器中,它在 .h 中看起来像这样: NSString *ID; @propery(nonatomic, 保留) NSString *ID;我从 PREVIOUS viewController 中的字典中获取值。我正在尝试使用自动生成的 setID: [data] ,但我无法正确地将其表示为“2”或“1”,这很重要,因为这些字符需要在我即将到来的 url 请求中制作。
  • 您是否尝试过实际使用此字符串来构建 URL 并失败了?在我看来,你做的事情是正确的,如果唯一的问题是将它打印到控制台或在调试器中看到它以不同于你期望的表示形式显示它,我只会测试使用变量来构建一个 URL 字符串,如果有问题,用代码更新你的问题。
  • 好的,非常感谢,我应该很快就会回到工作站,如果需要,我可以发布代码。我在床上也意识到我应该做一些简单的事情,比如询问字符串的长度,这可能有助于我认为确定该字符串的最高表示是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多