Objective-C NSKeyeduchiver卸载

Objective-C NSKeyeduchiver卸载,objective-c,macos,cocoa,Objective C,Macos,Cocoa,在某些AppDelegate类中,我有属性NSDictionary*dict 在applicationdFinishLaunching中,我像这样加载它: dict = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithFile: @"/Users/username/Desktop/storage"]; 然后,我有出口按钮点击。但在点击操作处理程序中,我无法访问dict的元素。我做错了什么

在某些AppDelegate类中,我有属性
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