我正在制作我的第一个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的数据。感谢您提供所有有用的帮助!
答案 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