Нубу нужна помощь в разработке модели данных и контроллера

Отказ от ответственности: я изучаю Objective C/Cocoa около 2 месяцев и пообещал себе, что всегда буду пытаться найти ответ сам, а не засорять интернет тупыми нубскими вопросами. На данный момент я просто запутался во всем, и я думаю, что в этот момент мне было бы полезно задавать вопросы. Заранее извиняюсь.

Проблема: я пытаюсь написать приложение в стиле master-detail (это просто для практики) под названием «My Dream Garage». В основном я хочу хранить объекты автомобилей и их свойства. У меня есть класс "Автомобиль", который выглядит так:

#import <Foundation/Foundation.h>

@interface Car : NSObject
@property (nonatomic, strong) NSString *brand, *model, *trimLevel;
@property (nonatomic, strong) NSNumber *modelYear, *engineSizeinL, *weight;
@property (nonatomic, strong) id image;
@end

В моем основном файле .XIB у меня есть NSTableView и куча текстовых меток, которые будут отображать каждое свойство (и изображение для изображения).

Мой вопрос: как мне хранить эти данные? Я понимаю, что такое NSArray, NSDictionary, ArrayController и DictionaryController по отдельности. Я просто немного смущен тем, как заставить их работать вместе. Когда я добавляю новый «автомобиль», должен ли я создавать экземпляр нового объекта «Автомобиль» с его свойствами? В этот момент я добавляю новый объект в массив, а затем освобождаю созданный объект «Автомобиль»? Связать табличное представление и текстовые метки с контроллером NSDictionary? Я даже не уверен, что я должен спросить в этот момент.

Возможно, я немного не в себе. Что, кроме документации Apple (которая очень хороша, но слишком многословна для любителя), может быть рекомендовано для изучения того, как создавать приложения, подобные этому?

Любая помощь приветствуется. Спасибо.


person Joseph Toronto    schedule 30.07.2012    source источник


Ответы (1)


Здесь много вопросов:

Вы хотите хранить их несколько постоянно? Если это так, вам нужно начать изучать Core Data.

Как выглядит файл реализации для класса Car? Как вы (или вы) создаете и инициализируете новый объект?

Мои объекты класса обычно выглядят примерно так:

Интерфейс:

@interface UserInfo : NSObject {
    NSString *_networkID;
    NSString *_displayName;
    NSString *_userDomain;
    BOOL _loggedIn;
}
@property(nonatomic,strong) NSString *networkID;
@property(nonatomic,strong) NSString *displayName;
@property(nonatomic,strong) NSString *userDomain;
@property(nonatomic) BOOL loggedIn;

-(id) initWithUserNetworkID:(NSString *)networkID 
                displayName:(NSString *)displayName  
                 userDomain:(NSString *)userDomain;

@end

Реализация:

#import "UserInfo.h"

@implementation UserInfo

@synthesize networkID = _networkID;
@synthesize displayName = _displayName;
@synthesize loggedIn = _loggedIn;
@synthesize userDomain = _userDomain;


-(id) initWithUserNetworkID:(NSString *)networkID 
                displayName:(NSString *)displayName 
                 userDomain:(NSString *)userDomain {

    if ((self = [super init])) {
        _networkID = [networkID copy];
        _displayName = [displayName copy];
        _userDomain = [userDomain copy];
        _loggedIn = YES;
    }

    return self;
}

@end

И я создам новый с таким кодом:

UserInfo *myUserInfo = [[UserInfo alloc] 
                                initWithUserNetworkID:[loginDictionary objectForKey:@"NetworkID"]  
                                displayName:[loginDictionary objectForKey:@"DisplayName"] 
                                userDomain:[loginDictionary objectForKey:@"UserDomain"]];
person LJ Wilson    schedule 30.07.2012
comment
Спасибо за ответ! Все, что у меня сейчас есть в реализации, это @synthesize с именами свойств. Итак, кажется, мне нужно написать инициализатор внутри Car.m. У меня есть несколько вопросов о вашем примере кода. Вы объявляете переменные в интерфейсе с _ перед ними, а затем синтезируете их. Я думал, что synthetic сделал объявления за вас (возможно, здесь я совершенно не прав). И какой цели служат копии? Я не видел этого раньше. Еще раз спасибо! - person Joseph Toronto; 31.07.2012
comment
Кроме того, в отношении основных данных. Я еще не очень много об этом узнал, потому что хотел бы сначала разобраться с этими простыми вещами, но я думал просто написать NSDictionary в .plist. Это опрометчиво? - person Joseph Toronto; 31.07.2012
comment
Подчеркивание — это соглашение об именах, которое я обычно использую для своих переменных экземпляра. Затем мои свойства синтезируются в ивар. Это просто исходит из моего раннего опыта наблюдения за тем, как это делает Apple. На самом деле совершенно нормально использовать одно и то же имя без подчеркивания, если все, что вы делаете, это инициализирует объект. Что касается Core Data, я бы не стал откладывать. Обратитесь к Magical Record, если вам нужна хорошая библиотека, которая поможет управлять и учиться, но компакт-диск — это необходимый инструмент, и он не так близок к кривой обучения, как думает большинство. - person LJ Wilson; 31.07.2012
comment
Спасибо. Я начну изучать Core Data и, возможно, также почитаю Magical Record. - person Joseph Toronto; 31.07.2012