1

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

1:将第二个选项卡链接到导航控制器

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

3:创建 WinesViewController.h/.m 类

4:添加了一个带有标识符的原型单元格:wineCell 和带有文本的标题和副标题标签:名称和地区。

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

6:创建了一个 plist:Wine.plist,每个酒有 1 个字典,字典键 = 酒名。字典包含 19 个字符串,键为“Name”、“District”、“Image”、“Acid level”等。

这是列表:

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 中的数据进行。感谢您提供所有有用的帮助!

4

1 回答 1

1

你应该从阅读如何在 Objective-C 中使用模型-视图-控制器范式开始。这将解释如何将您的数据与该数据的视图分开。一旦你理解了这一点,你就会更好地理解其余的内容。

我建议对您的 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. WineObjects您可以使用我在其他问题中提到的方法从 plist 中读取对象。它看起来像这样:

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类将有一个类初始化程序,如下所示:

+ (id)wineWithDictionary:(NSDictionary*)wineDict
{
    name = [wineDict objectForKey:@"Name"];
    district = [wineDict objectForKey:@"District"];
    imagePath = [wineDict objectForKey:@"Image"];
    // ... extract the rest of the values from the dictionary ...
}
于 2012-06-16T04:54:40.140 回答