CoreData中的瞬态属性
问题描述:
我正尝试在CoreData中使用transient属性。最后,我试图创建一个只在运行时保存在内存中而不在数据库中的对象。CoreData中的瞬态属性
我的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时使用同一个对象?
谢谢。
答
嗯我对Core Data有一个非常基本的理解,并且我已经处理了这个问题。如果你有一个NSManagedObject子类,你不能通过一个类别添加实例变量。您可以添加setter和getter和属性,但不添加额外的存储空间。
这种瞬态的事情听起来很有趣。另一种方法是创建一个与NSManagedObject对应的“常规”对象(NSObject的子类),并且还具有所需的任何非CoreData属性(包括存储ivars)。所以它看起来是这样的:
(股票是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
祝你好运,
达米恩