CoreData 中的瞬态属性

Posted

技术标签:

【中文标题】CoreData 中的瞬态属性【英文标题】:Transient Attribute in CoreData 【发布时间】:2012-02-29 10:33:25 【问题描述】:

我正在尝试使用 属性。最后,我尝试创建一个对象,该对象仅在运行时保存在内存中,而不是在数据库中。

我的属性的 Setter 和 getter:

-(AVMutableComposition *) composition

    AVMutableComposition *composition;
    [self willAccessValueForKey:@"composition"];
    composition = [self primitiveValueForKey:@"composition"];
    [self didAccessValueForKey:@"composition"];
    if (composition == nil) 
    
        self.composition = [AVMutableComposition composition];
    

return composition;

- (void)setComposition:(AVMutableComposition*)aComposition

    [self willChangeValueForKey:@"composition"];
    [self setPrimitiveValue:aComposition forKey:@"composition"];
    [self didChangeValueForKey:@"composition"];

我的新创建对象有问题,一开始它每次都是从头开始创建它,现在它无法正常工作。

谁能建议如何编写正确的 setter 和 getter 以便第一次创建对象,然后每次调用 getter 时都使用相同的对象?

谢谢。

【问题讨论】:

【参考方案1】:

嗯,我对 Core Data 有非常基本的了解,并且我已经解决了这个问题。如果您有 NSManagedObject 子类,则不能通过类别添加实例变量。您可以添加 setter 和 getter 以及属性,但不能添加额外的存储空间。

那种短暂的东西听起来很有趣。另一种方法是拥有一个与您的 NSManagedObject 相对应的“常规”对象(NSObject 的子类),并且还具有您想要的任何非 CoreData 属性(包括存储 ivars)。所以它看起来像:

(Stock 是 CoreData 实体)

ComboClass.h:

#import <Foundation/Foundation.h>
#import "Stock.h"

@interface ComboClass : NSObject

@property (weak, nonatomic) Stock *stock;
@property (strong, nonatomic)  NSDictionary *nonPersistentDictionary;

@end

ComboClass.m:

#import "ComboClass.h"

@implementation ComboClass

@synthesize stock = _stock;
@synthesize nonPersistentDictionary = _nonPersistentDictionary;

- (Stock*)stock 
    // retrieve the stock from CoreData using a fetchedResultsController
    return _stock;


- (NSDictionary*)nonPersistentDictionary 
    if (!_nonPersistentDictionary) 
        _nonPersistentDictionary = [[NSDictionary alloc] init];
    
    return _nonPersistentDictionary;


@end

祝你好运,

达米安

【讨论】:

以上是关于CoreData 中的瞬态属性的主要内容,如果未能解决你的问题,请参考以下文章

NSFetchedResultsController 的瞬态属性上的 NSSortDescriptor

CoreData 瞬态关系示例

核心数据,“按瞬态属性排序”解决方法

可以使用反射获得类中的瞬态字段吗

NHibernate 中的自引用实体给对象引用一个未保存的瞬态实例异常

对象引用未保存的瞬态实例 在刷新错误之前保存瞬态实例