Objective-C NSKeyeduchiver卸载
在某些AppDelegate类中,我有属性Objective-C NSKeyeduchiver卸载,objective-c,macos,cocoa,Objective C,Macos,Cocoa,在某些AppDelegate类中,我有属性NSDictionary*dict 在applicationdFinishLaunching中,我像这样加载它: dict = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithFile: @"/Users/username/Desktop/storage"]; 然后,我有出口按钮点击。但在点击操作处理程序中,我无法访问dict的元素。我做错了什么
NSDictionary*dict代码>
在applicationdFinishLaunching
中,我像这样加载它:
dict = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithFile:
@"/Users/username/Desktop/storage"];
然后,我有出口按钮点击。但在点击操作处理程序中,我无法访问dict的元素。我做错了什么
编辑:
以下是.h文件:
#import <Cocoa/Cocoa.h>
@interface tttAppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
NSDictionary *dict;
}
@property (assign) IBOutlet NSWindow *window;
- (IBAction)click:(id)sender;
@end
您应该使用属性访问器,而不是直接访问实例变量:
在.h文件中:
@interface tttAppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
NSDictionary *dict;
}
@property (assign) IBOutlet NSWindow *window;
@property (nonatomic, retain) NSDictionary *dict;
- (IBAction)click:(id)sender;
@end
这样做有几个原因,但在这种情况下,最重要的是访问器方法可以处理实例变量的内存管理。请发布更多代码。dict是实例变量吗?还有一个问题:您使用的是ARC(自动引用计数)还是手动内存管理?
@interface tttAppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
NSDictionary *dict;
}
@property (assign) IBOutlet NSWindow *window;
@property (nonatomic, retain) NSDictionary *dict;
- (IBAction)click:(id)sender;
@end
@implementation tttAppDelegate
@synthesize window;
@synthesize dict;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
self.dict = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithFile:@"/some/storage"];
NSLog(@">>>>>>> %@", [self.dict valueForKey:@"test"]); // ok
}
- (IBAction)click:(id)sender {
NSLog(@">>>>>>> %@", [self.dict valueForKey:@"test"]); // fail
}
@end