当我通过引用CoreData管理的Object变量传递时,为什么我的原始变量没有改变?

时间:2011-07-11 10:15:22

标签: iphone objective-c ios core-data pass-by-reference

当我通过引用CoreData管理的Object变量传递时,为什么我的原始变量没有改变?

所以我在我的iPhone应用程序中有一个名为Config的coredata托管对象。 XCode 4中产生的* .h和* .m文件中的一个变量是“@dynamic height;” (我指出这一点,因为我想知道它是否与此相关)。在代码中访问此变量时,它是NSNumber。

因此,当我设置一个新的数据选择视图/控制器时,我将此控制器中的变量设置为等于高度,这样当我在下一个视图中更改它时回来后,应该在第一个视图中进行更改(通过参考概念)。

唯一的问题是它似乎没有改变价值?

一些代码提取:

@interface Config : NSManagedObject {
@private
}
@property (nonatomic, retain) NSNumber * height;
@end


@implementation Config
@dynamic height;
@end

调用第二个视图

// Prepare
SelectorController *sc = [[SelectorController alloc] initWithStyle:UITableViewStyleGrouped];
sc.returnValue = self.config.height;

// Show New Window
[self.navigationController pushViewController:sc animated:YES];
[sc release];

部门控制器

@interface SelectorController : UITableViewController {
    NSNumber *_returnValue;
}
@property (nonatomic, retain) NSNumber *returnValue;
@end

1 个答案:

答案 0 :(得分:2)

NSNumber是不可变的,也就是说,在创建后不能更改其值。为NSNumber属性分配新值时,它是一个完全不同的对象,原始对象根本不会更改。