gpt4 book ai didi

iOS 更改父 ViewController 的 Integer/NSNumber

转载 作者:行者123 更新时间:2023-12-01 18:47:29 25 4
gpt4 key购买 nike

我有一个具有 NSInteger(或 NSNumber)属性的 viewController,我想要做的是将整数传递给子 ViewController,做一些更改(可能添加一些数字)。

但是当我在父子 Controller 中使用 NSNumber 作为属性并通过 set 属性传递它时:

//parent and child property.    
@property (nonatomic,strong) NSNumber *num;

//pass to the child
child.num = self.num;

//do some change in child
self.num = [NSNumber numberWithInteger:[self.num integerValue] + 1];

这不能改变 parent 的值,因为 NSNumber 是只读的,并且在 child 中他们分配一个新的,而不改变 parent 的值。

所以:

如何将 NSInteger 或 NSNumber 传递给子 ViewController 并更改其中的值,当子项弹出时,父 Controller 会得到更改?

最佳答案

您正在以下行中定义和分配一个新的 NSNumber:

self.num = [NSNumber numberWithInteger:[self.num integerValue] + 1];

你不能使用这个方法,因为 NSNumbers 是不可变的。
所以 self.num 将指向另一个与父级不同的位置 num .
为避免此类问题,您可以使用委托(delegate)模式或简单地将父级的 viewController 指针传递给子级并更改其 num值(value)。

例如:

家长的标题:
@property (nonatomic,strong) NSNumber *num;

child 的标题:
@property (nonatomic,weak) parentViewControllerClass * parentClass;

代码:
self.parentClass.num = [NSNumber numberWithInteger:[self.parentClass.num integerValue] + 1];

附言您可以查看如何定义协议(protocol) herehere .有了它,您可以实现委托(delegate)模式。

关于iOS 更改父 ViewController 的 Integer/NSNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34270605/

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