Вопрос по properties, uitableview, nsdictionary, xcode – Соедините прототип ячейки с листом в xcode 4

1

Я делаю свое первое приложение для iPhone, а оно - приложение для винных карт. Это с раскадровкой в xcode 4.2. Он основан на панели вкладок с 4 вкладками: информация, винная карта, поиск, избранное. Я сейчас делаю винную карту. На этой вкладке я поместил TableView с ячейкой-прототипом, и я хочу заполнить эту ячейку названием, районом и изображением вин. Пока я сделал это:

1: Связал вторую вкладку с контроллером навигации

2: Связал контроллер навигации с TableView (WinesViewController)

3: Создан класс WinesViewController.h / .m

4: добавлен прототип ячейки с идентификатором: wineCell и title & amp; метки субтитров с текстом: name & amp; р-н.

5: Сделал папку со всеми изображениями бутылок WineName.png

6: Создан список: Wine.plist с 1 словарем для каждого вина, ключ словаря = название вина. Словари содержат 19 строк с ключами «Имя», «Район» & quot; Изображение & quot ;, & quot; Уровень кислоты & quot; и т.п.

Это плист:

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

Это все, что я до сих пор делал, и теперь я хочу заполнить метки ячеек в табличном представлении строками в листе, отсортированными по разделам в алфавитном порядке. Я новичок в этом, поэтому я не знаю, какие коды использовать и где их разместить. Может кто-нибудь помочь мне понять, как заполнить табличное представление информацией из списка?

Мне сказали, что я не должен помещать код непосредственно в WinesViewController.h / .m. Тогда мне сказали, что я могу создать подкласс NSObject (пусть назовем его WineObject.h / .m), поместить сюда некоторые коды NSDictionary / NSEnumerator и затем каким-то образом связать это с ячейкой-прототипом WinesViewController. Но я действительно не знаю как! Я еще не испытал этого! Я действительно надеюсь, что кто-то может помочь мне с кодами, где их поставить и как все это связать. Это было бы фантастически. Я сейчас немного начинаю понимать кодирование X-Code и Objective C (наконец-то!), Но это еще далеко, и некоторая помощь теперь, когда я застрял, даст мне много работы! Также приветствуются указания на полезные учебные пособия, примеры проектов и т. Д.

Дайте мне знать, если есть что-то еще, что вам нужно знать, чтобы ответить на мой вопрос! Я не написал ни одной строки кода в WinesViewController или WineObject, поэтому мне действительно нужно полное объяснение.

Позже я буду использовать информацию из того же списка в DetailViewController (полноэкранном представлении с информацией о винах), поэтому в списке так много строк, когда я использую только 3 значения в ячейках табличного представления. Функция поиска также будет сделана по данным из этого списка. Спасибо за всю полезную помощь!

Ваш Ответ

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, Вы можете прочитать объекты из списка, используя метод, который я упомянул в вашем другом вопросе. Это будет выглядеть примерно так:

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 ...
}
Спасибо миллион раз, я пойму это сейчас и опубликую свое решение, когда я закончу! ingenspor

Похожие вопросы