Bil*_*hed 12 iphone core-data objective-c
我正在为我的基于Core Data的应用添加一个瞬态属性,我想我错过了一些东西.在数据模型编辑器,我加了optional
,transient
,BOOL
物业叫isUnderwater
.
在我的模型的头文件中,我添加了:@property (nonatomic) BOOL isUnderwater;
,然后我在实现文件中实现了这些方法:
- (BOOL)isUnderwater {
... implementation ...
return (ret);
}
- (void)setIsUnderwater:(BOOL)isUnderwater {}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试isUnderwater
在NSPredicate中使用时,我得到了这个错误:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath isUnderwater not found in entity <NSSQLEntity Wheel id=2>'
.
有任何想法吗?
谢谢!
Mar*_*rra 30
首先,您不能在NSFetchRequest
针对SQLite存储的情况下使用瞬态属性.当您使用SQLite时NSFetchRequest
,很久就会将您的瞬态转换为sql并对数据库运行.
此外,您不应该实现访问者,@synthesize
而应该使用.
接下来,如果您想要设置瞬态属性,那么您应该在-awakeFromFetch
和/或-awakeFromInsert
而不是覆盖getter中进行设置.
接下来,应该调用您的属性underwater
,@property
定义应该是:
@property (nonatomic, retain, getter=isUnderwater) NSNumber *underwater;
Run Code Online (Sandbox Code Playgroud)
注意:即使你在模型中声明它是一个布尔值,它仍然是NSNumber
代码.
最后,在瞬态属性上设置可选标志没有任何价值,因为无论如何它都会被丢弃.
一旦实体在内存中,您可以应用其他过滤器(甚至是针对瞬态属性).唯一的限制是,当您使用SQLite文件时,不能使用瞬态属性.
例如,您可以NSFetchRequest
在所有实体中执行加载.然后,您可以立即NSPredicate
对返回的内容应用秒,NSArray
然后进一步过滤掉对象.
归档时间: |
|
查看次数: |
5740 次 |
最近记录: |