Macos 如何在osx中归档一个普通的蓝色立方体对象?
我在IB中有一个纯蓝色的立方体对象,名为AppController。以下是头文件:Macos 如何在osx中归档一个普通的蓝色立方体对象?,macos,interface-builder,archiving,Macos,Interface Builder,Archiving,我在IB中有一个纯蓝色的立方体对象,名为AppController。以下是头文件: //AppController.h #import <Cocoa/Cocoa.h> @interface AppController : NSObject <NSCoding> @property (weak) IBOutlet NSView *view; @property (assign) int numberOfPresses; - (IBAction)buttonPresse
//AppController.h
#import <Cocoa/Cocoa.h>
@interface AppController : NSObject <NSCoding>
@property (weak) IBOutlet NSView *view;
@property (assign) int numberOfPresses;
- (IBAction)buttonPressed:(id)sender;
@end
如您所见,当用户按下按钮时,NumberOfPress会增加。当我退出应用程序并再次启动它时,我想
AppController
,并创建其视图。从某种意义上说,它是“预归档”的
这意味着真正的问题是如何恢复印刷机的数量。
对于这样简单的东西,NSUserDefaults
可能是一个候选。在按下按钮时更新默认值,并在awakeFromNib
期间检索它
对于动态创建的完整自定义对象,自定义归档和取消归档通常比从IB加载的对象更好
(如果您需要恢复的是一个复杂的对象网络,那么我要说的是CoreData。)我想要的是一个通用的解决方案,我可以在任何项目中实现,并且只使用NSCoding。(如果有人有更简单的解决方案,我很想听听)。通过引入两个对象,我最终得到了一个有效的解决方案:一个Hub和一个RootObject。这个想法可以概括为三点:
谢谢你的回答,菲利普。正如我在问题中所说的,我知道plist(也称为NSUserDefaults),但我希望只使用自定义归档就可以完成所有工作。我的应用程序有数千行,大约有30个不同的类。其中五个是IB中的蓝色对象,它们具有出口和非出口属性。其他类动态创建实例,对于它们来说,自定义归档是合适的。CoreData对我来说太复杂了。但我会尝试将归档和NSUserDefaults结合起来,也许这样就可以了。如果成功的话,我会接受你的回答。我已经尝试让我的项目结合使用NSCoding和NSUserDefaults,但是没有成功。所以我必须用插座将物体分成两部分,一部分在IB中存在,另一部分不存在。然后一切顺利。
//AppController.m
#import "AppController.h"
@implementation AppController
-(void)awakeFromNib {
NSLog(@" number of presses = %d", _numberOfPresses);
}
- (IBAction)buttonPressed:(id)sender {
_numberOfPresses++;
NSLog(@" number of presses = %d", _numberOfPresses);
}
#pragma mark - Coding Protocol
-(void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeInt:_numberOfPresses forKey:@"numberOfPresses"];
}
-(id)initWithCoder:(NSCoder *)aDecoder {
self = [super init];
if (self) {
_numberOfPresses = [aDecoder decodeIntForKey:@"numberOfPresses"];
}
return self;
}
@end