【问题标题】:Objective-C arrayWithPlist (that's already in an NSString)Objective-C arrayWithPlist(已经在 NSString 中)
【发布时间】:2010-10-28 20:52:03
【问题描述】:

我有一个已经包含一个 pList 的 NSString。

如何把它变成一个 NSArray? (不将其保存到磁盘,只需使用 arrayWithContentsOfFile 重新加载它,然后必须将其删除。)

make arrayWithPlist 或 arrayWithString 方法在哪里? (或者我如何自己制作?)

 NSArray *anArray = [NSArray arrayWithPlist:myPlistString];

【问题讨论】:

  • 对某些人有用的东西……对其他人无效。其他答案是“50%”正确。其他人有5个正确答案。抱歉...我只是来寻求帮助...并提供帮助。不想玩“谁对谁错”的争论游戏。
  • 有谁知道我可以如何阻止 vikingosegundo,这样他的无用“答案”就不会出现在我的屏幕上?
  • 有谁知道,帕特里夏为什么这么生气?

标签: iphone objective-c nsstring nsarray plist


【解决方案1】:

你想使用NSPropertyListSerialization:

NSData *data = [plistString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = nil;
NSArray *plist = [NSPropertyListSerialization
                  propertyListWithData:plistData
                  options:/*unused*/0
                  format:NULL
                  error:&error];
if (!plist) {
    NSLog(@"%s: Failed to create plist: %@",
          __func__, error ?: @"(unknown error)");
}

该特定方法是在 iOS 4.0/Mac OS X 10.6 中引入的。在这些版本之前,您将使用:

NSData *data = [plistString dataUsingEncoding:NSUTF8StringEncoding];
NSString *errorText = nil;
NSArray *plist = [NSPropertyListSerialization
                  propertyListFromData:plistData
                  mutabilityOption:NSPropertyListImmutable
                  format:NULL
                  errorDescription:&errorText];
if (!plist) {
    NSLog(@"%s: Failed to create plist: %@",
          __func__, errorText ?: @"(unknown error)");

    /* Part of the reason this method was replaced:
     * It is the caller's responsibility to release the error description
     * if any is returned. This is completely counter-intuitive.
     */
    [errorText release], errorText = nil;
}

【讨论】:

  • 我会试试看的。我想最大的问题是:我怎么能自己解决这个问题?我从来没有想过深入研究 NSPropertyListSerialization 来寻找这个解决方案。
  • 您想对属性列表做一些事情。因此,在 Xcode 文档窗口中,您将开始输入“property”。然后您可能会找到该课程,或者您会找到并阅读 Apple 的 Property List Programming Guide。苹果的文档真的很不错,也提供了很多样例代码和项目。
  • 文档对我来说一直没用。我会搜索 NSARRAY (不是财产)。但无论哪种方式......我会得到 100 场比赛并花大约一个小时阅读它们......其中 0 场会回答我的问题。
  • 这就是我尝试 Jermemy 的代码时得到的全部信息:(即使我根本没有尝试向它发送任何“选择器”………………* ** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** +[NSPropertyListSerialization propertyListWithData:options:format:error:]: unrecognized selector sent to class 0x38483aa4”
  • “选择器”是“方法名称”的另一种说法。此错误表示NSPropertyListSerialization 没有propertyListWithData:options:format:error: 方法。此方法是在 iOS 4.0 中引入的,因此您可能针对的是该平台的早期版本。我会将旧版本的代码添加到答案中。
猜你喜欢
  • 1970-01-01
  • 2011-03-12
  • 2011-10-17
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多