gpt4 book ai didi

ios - 使用其基础对象值更新 NSDictionary 值

转载 作者:行者123 更新时间:2023-11-29 10:32:01 25 4
gpt4 key购买 nike

编辑:真实情况

MyAppDelegate 有这些资源:

@property (nonatomic, strong) NSDictionary *page1;
@property (nonatomic, strong) NSDictionary *page2;
@property (nonatomic, strong) NSDictionary *page3;

这是我初始化它们时的样子:

self.page1 = @{@"videoPath":myPath, @"leftText":self.buttonTitle1, @"menuButtons":@[page2,page3]};
self.page2 = @{@"videoPath":myPath, @"leftText":@"long text", @"menuButtons":@[page1,page3]};
self.page3 = @{@"videoPath":myPath, @"leftText":@"another text", @"menuButtons":@[page1,page2]};

所以每个 menuButtons 键都包含对其他对象的引用。

举个例子:在某个时刻,用户编辑了 buttonTitle1 变量,写了一个新文本(例如:“我的新按钮标题”)。我希望其他词典(page2page3)会反射(reflect)此修改,因此检查 page2[@"menuButtons"] 会给我一个“我的新按钮标题”(page1 的 leftText 键)和“另一个文本”(page3 的 leftText 键)的 NSArray。

假设有大约 100 个页面,用户可以多次编辑 buttonTitle1

如何让我的词典保持更新?


原始 - 不详细 - 问题:

给定一个带有键和值的 NSDictionary,我想保持 NSDictionary 的内容更新,所以当有人编辑 NSDictionary 之外的值时,它会反射(reflect)该修改。我不知道如何用英语解释这个,所以请看这个例子:

NSNumber *number = [NSNumber numberWithInt:1];
NSDictionary *dict = @{@"test":number};
NSLog(@"%@", dict); // print "test = 1"
number = [NSNumber numberWithInt:2];
NSLog(@"%@", dict); // print "test = 1" but I'd expect "test = 2"

我知道 NSDictionary 获取对象的副本,那么是否有任何其他组件或解决方法来完成此操作?

请注意,我已经尝试过使用 NSMutableDictionary 和 NSMapTable,但都没有成功。

最佳答案

NSDictionary 不获取对象的副本,它获取键的副本。

你正在做的是改变一个与字典无关的指针,所以字典不知道它发生了变化。你无法真正让字典感知。

你可以做的是将一个可变对象放入字典中,然后改变它的内部状态。如果需要,包装类就可以了。

例如,如果您将可变字典放入字典中,然后更改可变字典的内容(但不是指向可变字典的指针,请注意此处)并记录字典,您将看到生成的日志输出更改。

关于ios - 使用其基础对象值更新 NSDictionary 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29124803/

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