NSPropertyListSerialization无法为表视图(iOS)中的详细信息视图设置图像字符串

时间:2011-11-28 06:26:02

标签: ios xcode uitableview serialization detail

当我浏览表视图时,我无法保持数组的内容。我的意思是,当我点击表视图中的一行时,我有一个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确定。在didSelectRowAtIndexPath方法中,我写了这个(我试图将PList中的'image'传递给我在Detail View中设置的Image String):

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

dealDetail.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>

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

中起作用
DealsDetailViewController *dealsDetail = [[DealsDetailViewController alloc]initWithNibName:@"DealsDetailViewController" bundle:nil];

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