2012-07-30 48 views
2

免責聲明: 我一直在學Objective C/Cocoa大約2個月左右,我答應我自己總是試着自己找到答案,而不是用啞巴堵塞互聯網noob問題。在這一點上我只是感到困惑,我想我會從提問中受益。我提前道歉。Noob需要幫助設計數據模型和控制器

問題: 我想寫一個名爲「我的夢想車庫」的主 - 細節風格的應用程序(這只是爲了練習)。基本上我想存儲汽車物體和它們的屬性。我有一個「汽車」類,看起來像這樣:

#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和一堆文字標籤,將顯示每個屬性(和圖像的imagewell)的。

我的問題是如何存儲這些數據?我明白NSArray,NSDictionary,ArrayController和DictionaryController是單獨的。我只是對如何讓他們一起工作感到困惑。當我添加一個新的「汽車」,我是否應該用它的屬性實例化一個新的「汽車」對象?那時,我是否將新對象添加到數組中,然後釋放創建的「Car」對象?我是否將tableview和文本標籤鏈接到NSDictionary控制器?我甚至不確定我現在應該問什麼。

也許我有點在我的頭上。除了Apple的文檔(對於業餘愛好者來說這非常好但過於冗長),還會推薦學習如何創建類似於此的應用程序?

任何幫助是極大的讚賞。謝謝。

回答

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

謝謝f或回覆!我現在執行的所有內容都是@synthesize和屬性名稱。好吧,看來我需要在Car.m中寫一個初始化器。 雖然我有一些關於你的示例代碼的問題。你在接口中用變量聲明變量,然後綜合它們。我認爲綜合爲你做了聲明(我可能在這裏完全錯誤)。還有什麼目的「複製」服務?我以前沒見過這個。 再次感謝您! – 2012-07-30 21:28:05

+0

另外,關於核心數據。我還沒有真正學到很多關於它的知識,因爲我想先弄清楚這些簡單的東西,但是我只是想把NSDictionary寫入.plist。這是不明智的? – 2012-07-30 21:34:06

+0

下劃線是我傾向於用於實例變量的命名約定。然後我的屬性合成到伊娃。這只是從我早期的經驗來看待蘋果的做法。如果你正在做的是初始化一個對象,那麼在沒有下劃線的情況下使用相同的名字實際上是非常好的。就Core Data而言,我不會放棄這一點。如果你想要一個漂亮的圖書館來幫助管理和學習,請查看魔法記錄,但是CD是一個必不可少的工具,並且它並不在大多數人認爲的學習曲線附近。 – 2012-07-31 09:33:29