gpt4 book ai didi

objective-c - 在自定义 getter/setter 方法中使用 NSKeyedArchiver/Unarchiver

转载 作者:行者123 更新时间:2023-12-03 17:31:33 27 4
gpt4 key购买 nike

我正在尝试使用 NSKeyedArchiver/NSKeyedUnarchiver 将类属性的数据存储在文件中,以便在启动之间保留属性的状态应用程序。

我在 MyClass.h 中声明了属性,如下所示:

@property (nonatomic, weak) NSDictionary *myDictionary;

我在 MyClass.m 中创建了自定义 getter 和 setter 方法,以确保 NSDictionary 写入磁盘:

-(NSDictionary *)myDictionary {
NSDictionary *dictionary;

NSString *path = [self pathToDataStore];
if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
dictionary = [NSDictionary dictionary];
} else {
NSData *archivedData = [NSData dataWithContentsOfFile:path];
dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:archivedData];
}

return dictionary;
}

-(void)setMyDictionary:(NSDictionary *)dictionary {
NSString *path = [self pathToDataStore];
NSDictionary *rootObject = [NSDictionary dictionaryWithDictionary:dictionary];
[NSKeyedArchiver archiveRootObject:rootObject toFile:path];
self.myDictionary = dictionary;
}

这导致无限循环调用[self setMyDictionary],所以显然我做错了什么。但问题出在哪里呢?

最佳答案

而不是:

self.myDictionary = dictionary;

你应该这样做:

@synthesize myDictionary;
...

-(void)setMyDictionary:(NSDictionary *)dictionary {

...
myDictionary = dictionary
}

您的问题发生的原因是调用:

self.myDictionary = dictionary; 

等于

[self setMyDictionary:dictionary];

关于objective-c - 在自定义 getter/setter 方法中使用 NSKeyedArchiver/Unarchiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18812069/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com