[英]iOS change Integer/NSNumber of parent ViewController
我有一個具有NSInteger(或NSNumber)屬性的viewController,我想要做的是將整數傳遞給子ViewController,做一些更改(可能添加一些數字)。
但是當我在父控制器和子控制器中使用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];
這不能更改父級的值,因為NSNumber是只讀的,並且在子級中它們分配了一個新的,而不更改父級的值。
所以:
我如何將NSInteger或NSNumber傳遞給子ViewController並更改其中的值,當子彈出時,父控制器得到更改?
您正在以下行中定義和分配新的NSNumber:
self.num = [NSNumber numberWithInteger:[self.num integerValue] + 1];
您不能使用此方法,因為NSNumbers是不可變的。 所以self.num將指向與父的num
不同的另一個位置。 為了避免這樣的問題,你可以使用委托模式或簡單地將父的viewController指針傳遞給子節點並更改其num
值。
例如:
家長的標題:
@property (nonatomic,strong) NSNumber *num;
孩子的標題:
@property (nonatomic,weak) parentViewControllerClass * parentClass;
碼:
self.parentClass.num = [NSNumber numberWithInteger:[self.parentClass.num integerValue] + 1];
也許在其他語言中你可以將指針傳遞給指針(我不確定你是否應該 ),但在Objective-C中你不能請求屬性的地址。
你可以做的是:
setNumber:
方法的協議setNumber:
setNumber:
function) setNumber:
來自子控制器 創建父控制器和子控制器之間共享的可變對象。 例如:
@interface Counter : NSObject @property (nonatomic) NSInteger value; @end
您可以從子控制器發布有關號碼更改的通知,並在父級中觀察它:
// post notification in child NSNumber *num = [NSNumber numberWithInteger:1]; [[NSNotificationCenter defaultCenter] postNotificationName:@"numberChangedNotification" object:self userInfo:@{@"number": num}]; // observe notifications in parent // first register observer in viewDidLoad [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeNumber:) name:@"numberChangedNotification" object:child]; // and implement updateNumber - changeNumber: (NSNotification *)notification { NSNumber *num = notification.userInfo[@"number"]; // ... }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.