使用xcode 4中的plist连接原型单元

时间:2012-06-14 19:02:57

标签: xcode properties uitableview nsdictionary

我正在制作我的第一个iphone应用程序,它是一个葡萄酒图表应用程序。这是xcode 4.2中的故事板。它基于一个带有4个标签的标签栏:信息,葡萄酒图表,搜索,收藏夹。我现在正在制作葡萄酒图表。在这个标签中,我放了一个带有原型单元格的TableView,我想用这个单元格填充这个单元格的名称,区域和图像。到目前为止,我已经做到了这一点:

1:将第二个标签链接到导航控制器

2:将导航控制器链接到TableView(WinesViewController)

3:创建了WinesViewController.h / .m类

4:添加了一个带有标识符的原型单元格:wineCell和title&带文字的字幕标签:name&区。

5:制作一个包含WineName.png瓶子所有图像的文件夹

6:创建了一个plist:Wine.plist,每个葡萄酒有1个字典,字典键=葡萄酒名称。字典包含19个字符串,其中包含“名称”,“区域”,“图像”,“酸性等级”等字样。

这是plist:

http://www.flickr.com/photos/80427098@N07/7372450200/in/photostream

这就是我到目前为止所做的一切,现在我想用plist中的字符串填充tableview中的单元格标签,按字母顺序按部分排序。我是新手,所以我不知道使用哪些代码以及放置它们的位置。有人可以帮助我更多地了解如何使用plist中的信息填充tableview吗?

我被告知不应该将代码直接放在WinesViewController.h / .m中。所以我被告知我可以创建一个NSObject的子类(让我们称之为WineObject.h / .m),在这里放一些NSDictionary / NSEnumerator代码,然后以某种方式将它链接到WinesViewController原型单元格。但我真的不知道怎么做!我不是那么有经验!我真的希望有人可以帮我提供代码,把它们放在哪里以及如何将它们连接起来。这太棒了。我现在开始理解X-Code和Objective C编码了一下(终于!)但是这已经进步了,而且现在我被困住了一些帮助会给我很多帮助!有用的教程,示例项目等的方向也很受欢迎。

如果您需要了解更多内容以便回答我的问题,请告诉我们!我没有在WinesViewController或WineObject中编写一行代码,所以我真的需要整个解释..

稍后我会在DetailViewController中使用来自同一个plist的信息(一个关于葡萄酒的信息的全屏视图),这就是为什么当我在tableview单元格中只使用3个值时,plist中有如此多的字符串。搜索功能也将来自此plist的数据。感谢您提供所有有用的帮助!

1 个答案:

答案 0 :(得分:1)

您首先应该阅读有关如何在Objective-C中使用model-view-controller范例的内容。这将解释如何将数据与该数据的视图分开。一旦你理解了这一点,你就能更好地理解其余部分。

我建议您对plist文件进行一次更改。而不是让顶级成为每个葡萄酒名称都是键的字典,并且每个键的值是包含葡萄酒信息的字典,我将使顶级成为字典数组。每个葡萄酒都是数组中的一个元素,并且是一个字典,包含您当前拥有的所有信息以及葡萄酒的名称。这将更接近于您的数据模型的外观。像这样:

<array>
    <dict>
        <key>Name</key>
        <string>J. P. Chenet Merlot</string>
        <key>Image</key>
        <string>JPChenet.png</string>
        ... the rest of the keys and values for this wine ...
    </dict>

    <dict>
        <key>Name</key>
        <string>Campo Viejo Crianza</string>
        ... the rest of the keys ...
    </dict>
</array>

每个wine对象都包含字典中每个元素的实例变量。 (所以一个用于图像,一个用于名称,一个用于区域等)这样的东西:

@class WineObject : NSObject { 
    NSString* name;
    NSString* imagePath;
    NSString* district;
    // ... etc.
};

您的模型可能只是NSArray的{​​{1}}。您可以使用我在其他问题中提到的方法从plist中读取对象。它看起来像这样:

WineObjects

您的NSMutableArray* wineModel = [[NSMutableArray alloc] init]; NSArray* wines = [NSArray arrayWithContentsOfURL:<url of the plist file>]; NSEnumerator* wineEnum = [wine objectEnumerator]; NSDictionary* nextWine = nil; while ((nextWine = [wineEnum nextObject]) != nil) { // Get the wine data from the dictionary WineObject* newWine = [WineObject wineWithDictionary:nextWine]; // Add the next wine to our model [wineModel addObject:newWine]; } 课程将有一个类初始值设定项:

WineObject