2012-06-14 55 views
1

我正在製作我的第一個iphone應用程序,它是一個葡萄酒圖表應用程序。這是在xcode 4.2中的故事板。它基於帶有4個選項卡的標籤欄:信息,葡萄酒圖表,搜索,收藏夾。我現在正在製作葡萄酒圖表,在這個標籤中,我將一個TableView與一個原型單元放在一起,我想用這個葡萄酒的名稱,區域和圖像填充這個單元格。到目前爲止我這樣做:用xcode 4連接一個plist原型單元格

1:鏈接的所述第二標籤中的導航控制器

2:鏈接的導航控制器到的TableView(WinesViewController)

3:創建所述WinesViewController.h/.m類

4:添加了帶標識符的原型單元格:wineCell和標題&帶文字的字幕標籤:名稱&分區。

5:製造與瓶WineName.png

6的所有的圖像文件夾:創建一個的plist:Wine.plist用1個字典對於每個酒,字典鍵=酒名。該字典包含19串的鑰匙「名稱」,「地區」,「圖片」,「酸水平」等

這是plist中:

http://www.flickr.com/photos/[email protected]/7372450200/in/photostream

這就是我一直這樣做的遠,現在我想用plist中的字符串填充表格視圖中的單元格標籤,並按字母順序分類。我對此很陌生,所以我不知道要使用哪些代碼以及將它們放在哪裏。有人能幫助我更多地瞭解如何使用plist的信息填充tableview嗎?

我被告知我不應該直接將代碼放在WinesViewController.h/.m中。所以後來我被告知我可以創建一個NSObject的子類(讓我們稱之爲WineObject.h/.m),在這裏放置一些NSDictionary/NSEnumerator代碼,然後以某種方式將它鏈接到WinesViewController原型單元格。但我真的不知道如何!我還沒有那麼有經驗!我真的希望有人能夠幫助我瞭解這些代碼,在哪裏放置它們以及如何將它們連接起來。這將是太棒了。我現在開始瞭解X編碼和Objective C編碼(最後!),但這是先進的,現在有些幫助,我卡住了會給我很多工作!也讚賞指導有用的教程,示例項目等。

讓我知道是否有更多的東西需要知道爲了回答我的問題!我沒有寫在WinesViewController或WineObject中的單行代碼,所以我真的需要整個解釋。

後來我將使用DetailViewController中的相同plist的信息(全屏視圖,葡萄酒)這就是爲什麼在plist中有很多字符串時,我只在tableview單元格中使用3個值。搜索功能也將從這個plist的數據。感謝您提供所有有用的幫助!

回答

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> 

每個葡萄酒對象都會包含字典中每個元素的實例變量。 (所以,一個圖像,一個名字,一個是區等)事情是這樣的:

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

你的模型可能僅僅是WineObjectsNSArray。您可以使用我在其他問題中提到的方法從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 ... 
} 
+0

謝謝你一萬次,我現在就想出解決辦法,併發布我的解決方案時,我受夠了! – ingenspor