【问题标题】:NSPropertyListSerialization Not Able To Set Image String For A Detail View in a Table View (iOS)NSPropertyListSerialization 无法为表视图中的详细视图设置图像字符串 (iOS)
【发布时间】:2011-11-28 06:26:02
【问题描述】:

我在浏览表视图时无法保留数组的内容。我的意思是我有一个 PList,一旦我单击表视图中的一行,我就会尝试从中为详细视图绘制数据。这是我在 viewDidLoad 中的内容:

NSString *myfile = [[NSBundle mainBundle] pathForResource:@"MillersDeals" ofType:@"plist"];
NSError *error;
NSData *data = [NSData dataWithContentsOfFile:myfile options:0 error:&error];
self.dealsArray = [NSPropertyListSerialization propertyListWithData:data                                                            options:NSPropertyListMutableContainers format:NULL error:&error];
NSLog(@"%@", self.dealsArray);

现在我从未使用过 NSPropertyListSerialization,直到早些时候有人建议我将它作为问题的答案。我不确定它是否会产生一整套不同的问题,或者是否需要将其转换回字典或数组,然后才能利用其中的信息。当我 NSLog 两次时,它会打印出我的 Plist ok。在 didSelectRowAtIndexPath 方法上我写了这个(我试图将 PList 中的“图像”传递到我在详细视图中设置的图像字符串中):

DealsDetailViewController *dealsDetail = [[DealsDetailViewController alloc]initWithNibName:@"DealsDetailViewController" bundle:nil];
NSLog(@"%@", dealsArray);
dealsDetail.petImageString = [[NSString alloc]initWithString:[[[dealsArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] objectForKey:@"Image"]];

dealsDetail.petImageString 声明出现错误。是不是我设置的 dealArray 数据类型错误?


Plist 示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"   "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <dict>
        <key>Description</key>
        <string>Here&apos;s the deal</string>
        <key>Image</key>
        <string>Frito-Lays-Jobs.png</string>
        <key>Name</key>
        <string>Frito-Lays</string>
        <key>Thumbnail</key>
        <string>dollars.png</string>
    </dict>
    <dict>
        <key>Description</key>
        <string>Here&apos;s the deal 2</string>
        <key>Image</key>
        <string>Frito-Lays-Jobs.png</string>
        <key>Name</key>
        <string>Frito-Lays 2</string>
        <key>Thumbnail</key>
        <string>dollars.png</string>
    </dict>
</array>

这只是样本(这就是为什么有些元素是相同的)。

【问题讨论】:

  • dataArray和dealsArray是什么关系?
  • 是的,你是对的。我只是更改了它并重申了问题。
  • 你能展示一下plist吗?或者至少是其中的一部分?
  • 好了,我刚刚添加了一个示例。
  • 添加了答案。您的 tableView 是否有多个部分?如果是这样,请发布您的 numberOfSectionsInTableView: 方法。

标签: ios xcode uitableview serialization detailsview


【解决方案1】:

您展示的这个 plist 是一个字典数组,而不是字典数组的数组。所以像这样的东西应该在你的 didSelectRowAtIndexPath 中起作用:

DealsDetailViewController *dealsDetail = [[DealsDetailViewController alloc]initWithNibName:@"DealsDetailViewController" bundle:nil];

dealsDetail.petImageString = [[self.dealsArray objectAtIndex:indexPath.row] objectForKey:@"Image"];

【讨论】:

  • 对对对。这很有意义。我已经用这个确切的代码正确地设置了表格视图行的名称,但由于某种原因,在将它推送到详细视图控制器时我自己感到困惑。感谢您为我解决这个问题!
【解决方案2】:

只是一个观察,但在第一个代码 sn-p 中您设置了一个“dealsArray”,而在第二个代码 sn-p 中,您尝试访问“dataArray”中的信息。 “dealsArray”的内容在什么时候被解析或传递到“dataArray”?您是否设置和/或访问了错误的数据结构?

【讨论】:

  • 啊是的一个轻微的语法错误(我一直在改变一些事情)。我刚刚更改了它,它记录了 dealArray,但它仍然没有设置图像字符串。我有理由相信我设置了错误的数据结构。我得到的错误是“-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x5f3d710”,其中 0x5f3d710 是 PList 中的第一个字典(我对其进行了调试)。我现在完全糊涂了...为能够设置图像字符串,dealsArray 需要什么数据结构?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
相关资源
最近更新 更多