声明: 我一直在学习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的文档(非常好,但对业余爱好者来说太冗长)之外,还是建议学习如何创建与此类似的应用程序?
非常感谢任何帮助。谢谢。
答案 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"]];