【问题标题】:Using transient attributes in Core-Data在 Core-Data 中使用瞬态属性
【发布时间】:2011-11-13 20:18:44
【问题描述】:

我不确定使用瞬态属性是否适合我的情况。我正在从服务器获取某种提要并存储在核心数据中。我在 TableView 中显示所有这些提要。提要有多种类型,因此单元格布局和子视图随每个提要而变化。在某些提要中,我需要设置一个临时变量(BOOL 和整数。所以我知道 NSNumber)。用例是,用户应该能够放大和折叠一些单元格(一种“阅读更多..”链接)。所以这种状态,我需要与每个 feed(NSManagedObject) 对象保持一致。在应用程序运行之前,此状态将一直存在。不应将其保存到持久性存储中,因为当用户打开应用程序时,所有提要都应该是新鲜的。

我刚刚添加了带有瞬态的属性,但它似乎不起作用。我在实体中添加了“NSNumber selected”属性作为瞬态,并在 NSManagedObject 文件中添加了属性和@dynamic。我搜索了论坛,没有解决方案与我的匹配。我尝试了很多样本​​,但真的很混乱..

接口文件是,

@interface FeedItemBase : NSManagedObject {
@private
}
@property (nonatomic, retain) NSDate * timestamp;
@property (nonatomic, retain) NSString * type;
@property (nonatomic, retain) NSNumber * premium;
@property (nonatomic, retain) NSNumber *selected; //This is what I added

@end

实现文件是,

@implementation FeedItemBase
@dynamic timestamp;
@dynamic type;
@dynamic premium;
@dynamic selected; //This is what I added

@end

所以请帮帮我。

【问题讨论】:

    标签: iphone core-data transient


    【解决方案1】:

    如果您不需要查询它,只需将常规 BOOL 添加到您的托管对象子类。

    @property (nonatomic, assign) BOOL selected; //This is what I added
    

    在你的 .m 文件中

    @synthesized selected = _selected;
    

    核心数据中的瞬态属性有很多奇怪的边缘情况;根据我的经验,我会尽可能避免使用它们。

    【讨论】:

    • 您好,感谢您的友好回答。我的疑问是,如果我们这样使用,应用程序如何保持这个变量的状态直到应用程序周期结束?我会解释的。我正在使用 NSFetchResultController。因此它不会将 NSManagedObject 保留在内存中。相反,它会在我们想要的时候得到。所以在这种情况下,如果我设置值并滚动表格视图,NSFetchResultController 将丢弃 NSManagedObject,因此变量状态也是如此。当用户返回到同一个单元格时,NSFetchResultController 会从 CoreData 中获取相应的 NSManagedObject,但该变量具有默认值。
    • Core Data Transient 属性可能不是您想要的。您可以尝试将状态保存在视图控制器或其他东西的内存中。另一种选择是使用传统的核心数据属性,并在应用加载时将其清除。 (但这对于大型收藏可能不可行)。
    • 非常感谢您的帮助。我找到了方向。我会尝试这些方法。
    • Hadhi,尊敬的,您是否有证据表明 NSFetchedResultsController 释放了它当前未显示的托管对象?根据我的经验,它保留了这些项目。我的 ivars 被保存下来。在配置单元格时使用断点进行测试相对容易。
    • @adonoho。不,我没有尝试过,但我相信它不会保留 NSManagedObject。如果是这样,使用所有 NSManagedObjects 和 NSFetchResultController 的数组没有区别。内存脚印将是相同的。反正我会按照你说的试一试。非常感谢您的意见。
    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    相关资源
    最近更新 更多