【问题标题】:why isn't my original variable changed when I pass by reference a CoreData managed Object variable?当我通过引用传递 CoreData 托管对象变量时,为什么我的原始变量没有改变?
【发布时间】:2011-07-11 10:15:21
【问题描述】:

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

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

所以当我设置一个新的数据选择视图/控制器时,我在这个控制器中设置一个变量等于高度,这样当我在下一个视图中更改它并返回时,它应该在第一个视图中更改(通过 ref 概念)。

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

部分代码摘录:

@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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 哦好的 - 关于我可以使用什么对象类型在控制器之间通过引用传递的任何建议,这样如果第二个控制器修改它,第一个控制器可以通过传递继承更改-参考效应? (我打算让第二个控制器用于不同的选择任务,所以想将数据传递给它并返回变量 - 即获得一些重用)
    • 您应该传递整个NSManagedObject 并让第二个控制器直接修改其属性。
    • 好的 - 但因为我想“重用”第二个控制器,我不得不做一些事情,比如传递托管对象属性的字符串表示,所以我可以获取/设置托管对象属性我想在第二个控制器中使用键/值objective-c 功能...有什么比这更好的吗?
    • 如果您的第二个视图控制器只编辑单个属性,而不是整个对象,是的,使用 setValue:forKey(Path): 传递对象和键(路径)可能会很好。
    猜你喜欢
    • 2011-09-04
    • 2015-01-07
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2011-08-11
    • 2012-02-14
    相关资源
    最近更新 更多