我試圖在我的OS X應用程序中實現保存用戶首選項。我有一個NSTableView將其數據存儲到我的.plist
文件,但我有麻煩加載相同的數據回到我的NSTableView。從未存檔的數據加載NSTableView
我的模型對象:
#import <Foundation/Foundation.h>
@interface UserKeys : NSObject <NSCoding>
@property (nonatomic, copy) NSString *userKeyName;
@property (nonatomic, copy) NSString *userApi;
@property (nonatomic, copy) NSString *userCode;
@end
及其實施:
#import "UserKeys.h"
@implementation UserKeys
- (id)init
{
self = [super init];
if (self) {
//
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super init];
if (self) {
self.userKeyName = [aDecoder decodeObjectForKey:@"userKeyName"];
self.userApi = [aDecoder decodeObjectForKey:@"userApi"];
self.userCode = [aDecoder decodeObjectForKey:@"userCode"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)enCoder {
[enCoder encodeObject:self.userKeyName forKey:@"userKeyName"];
[enCoder encodeObject:self.userApi forKey:@"userApi"];
[enCoder encodeObject:self.userCode forKey:@"userCode"];
}
@end
我的偏好觀看控制器頭:
#import <Cocoa/Cocoa.h>
#import "MASPreferencesViewController.h"
#import "UserKeys.h"
@interface PreferencesApiKeysViewController : NSViewController <MASPreferencesViewController>
@property (strong) NSMutableArray *allKeys;
@end
及其實施:
#import "PreferencesApiKeysViewController.h"
#import "UserKeys.h"
@interface PreferencesApiKeysViewController()
@property (weak) IBOutlet NSTableView *keysTableView;
@end
@implementation PreferencesApiKeysViewController
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle {
if ((self = [super initWithNibName:nibName bundle:bundle])) {
self.allKeys = [NSMutableArray array];
}
return self;
}
// delegating....
//
- (void)viewWillAppear {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"UserKeys"];
if (data != nil) {
NSArray *oldArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
if (oldArray != nil) {
self.allKeys = [[NSMutableArray alloc] initWithArray:oldArray];
} else {
self.allKeys = [NSMutableArray array];
}
}
}
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
// some code...
return cellView;
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return [self.allKeys count];
}
我得到的錯誤是:
-[UserKeys count]: unrecognized selector sent to instance 0x100534df0
當我把一個斷點- (void)viewWillAppear
,我可以看到data
有大約250個字節,但是這似乎oldArray
是空的。我知道我在self.allKeys
這裏犯了一些重大錯誤,所以我的表格不知道應該創建多少行,但是經過很多嘗試獲得正確的數據之後,我真的不知道爲什麼會發生這種情況。
那麼,如何正確地解壓我的數據並將其呈現在NSTableView中?
(我使用的Xcode 4.6)
啊,這是真的......其實問題是我以一種錯誤的方式歸檔我的數據,這就是爲什麼所有這些非歸檔都如此困惑 - – errata 2013-03-02 00:37:22