Noob需要帮助设计数据模型和调节器

时间:2012-07-30 20:05:32

标签: objective-c cocoa nsdictionary

声明: 我一直在学习Objective C / Cocoa 2个月左右,我向自己承诺,我总是会尝试自己找到答案,而不是用愚蠢的noob问题堵塞互联网。在这一点上我只是感到困惑,我想我会在提问时受益。我提前道歉。

问题: 我正在尝试编写一个名为“My Dream Garage”的主 - 细节风格的应用程序(这只是为了练习)。基本上我想存储汽车对象及其属性。我有一个“Car”类看起来像这样:

#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是单独的。我对如何让它们一起工作感到有些困惑。当我添加一个新的“汽车”时,我是否应该用它的属性实例化一个新的“汽车”对象?此时,我是否将新对象添加到数组中,然后释放创建的“Car”对象?我是否将tableview和text-labels链接到NSDictionary控制器?我现在还不确定我应该问什么。

也许我有点过头了。除了Apple的文档(非常好,但对业余爱好者来说太冗长)之外,还是建议学习如何创建与此类似的应用程序?

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

这里有很多问题:

您想要永久存储它们吗?如果是这样,您需要开始学习核心数据。

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"]];