gpt4 book ai didi

cocoa - 如何在 NSObject 子类上简洁地迭代 @properties 以从 plist 设置属性?

转载 作者:行者123 更新时间:2023-12-03 17:20:47 26 4
gpt4 key购买 nike

假设我有一个 NSObject 的子类(我们称之为“BSObject”),具有以下属性:

NSString *name;
NSNumber *num;

我有一个 BSObject 的 NSMutableArray(我们称其为“BSCollection”)。

对于磁盘上的存储,我有一个属性列表,它是一个字典数组。BSCollection 由根对象(一个数组)表示,数组的每个元素都是代表 BSObject 的字典。字典的键是属性名,值是BSObject的值。

具有两个 BSObject 的示例 plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>name</key>
<string>this is a name</string>
<key>num</key>
<integer>34</integer>
</dict>
<dict>
<key>name</key>
<string>this is another name</string>
<key>num</key>
<integer>22222</integer>
</dict>
</array>
</plist>

现在我想尽可能简洁地将 plist 加载到 BSObjects 的 BSCollection 中。我知道我可以为每个键/值对做这样的事情:

BSCollection = [BSCollection alloc] init];
if ([[NSFileManager defaultManager] fileExistsAtPath:URL]) {
NSArray *rawXML = [[NSArray alloc] initWithContentsOfFile:URL];
for (NSDictionary *object in rawXML) {
BSObject *new = [[BSObject alloc] init];
new.name = [new objectForKey:@"name"];
new.num = [new objectForKey:@"num"];
[BSCollection addObject:new];
}
}

但是:BSObject 的属性和 NSDictionary 的键是相同的!有什么办法可以利用这个事实吗?我相信在过程语言中,我会使用类似“exec()”的东西从属性名称中获取值,假设我可以以某种方式获取对象上的属性数组?恐怕我不太确定我在寻找什么,因此我的谷歌搜索结果是空的。

最佳答案

你的代码示例很困惑,但你想要的是这样的:

[new setValuesForKeysWithDictionary:dict];

关于cocoa - 如何在 NSObject 子类上简洁地迭代 @properties 以从 plist 设置属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28508885/

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