Vin*_*nie 4 iphone core-data ios
处理帮助表的最佳方法是什么(我认为这是一个更具技术性的词,但它现在正在逃避我)?例如,我的名为Entity的对象具有entity_type属性.该entity_type需要一个字符串描述.我们假设只有少数entity_types可能.
所以我可以看到一些方法:
拥有另一个Core Data实体对象名称Entity_Type并将其连接到多个,以便我可以轻松获取描述.例如,这将允许我轻松地在UIPickerView中使用.
我还可以看到为什么#1是一个陷阱,因为稍后我需要做一些像switch/case这样的事情来处理每种类型的特定功能.作为一个核心数据对象,我没有说"id"来执行switch语句.替代方案是硬编码枚举,但那我将如何处理描述?
也许是两者的结合?
任何有类似情况的建议或经验都会有很大帮助.我试过搜索,但我所有出现的是如何找到CD对象的ID,这是无关紧要的.
您所说的"组合"方法可能会像这样:
您的Entity_Type包含字符串描述和NSNumber'enumValue'属性.
然后定义一个具有显式值的枚举类型,用于向前和向后兼容(您不希望人们在顶部插入新枚举并破坏所有内容).
// these values must not change
enum Foo {
FooType1 = 1,
FooType2 = 2
};
Run Code Online (Sandbox Code Playgroud)
现在,您不希望将"enumValue"属性作为NSNumber处理,因此您不必使用@dynamic生成属性来定义自己的getter/setter来公开本机枚举值而不是NSNumber.像这样的东西:
- (void)setEnumValue:(enum Foo)newValue
{
NSNumber *numberValue = [NSNumber numberWithInt:newValue];
[self willChangeValueForKey:@"enumValue"];
[self setPrimitiveValue:numberValue forKey:@"enumValue"];
[self didChangeValueForKey:@"enumValue"];
}
- (enum Foo)enumValue
{
[self willAccessValueForKey:@"enumValue"];
NSNumber *numberValue = [self primitiveValueForKey:@"enumValue"];
[self didAccessValueForKey:@"enumValue"];
// optionally validate against possible enum values, maybe handle the case
// when you are reading a database made by a later version which has new
// unknown-to-us values, etc.
return (enum Foo) [numberValue intValue]
}
Run Code Online (Sandbox Code Playgroud)
我已经从内存中编写了这段代码,但这是事情的一般要点.getter/setter与底层托管对象的NSNumber值进行通信,但是您的对象本身会将该属性公开为强类型枚举类型.
然后,您可以定义一些辅助方法来获取枚举值的关联实体.这应该只是一个带enumValue == %@谓词的简单获取请求.
您还必须小心处理未知的枚举值.较旧版本的软件最终可能会读取包含它不知道的新枚举值的数据库.
| 归档时间: |
|
| 查看次数: |
3162 次 |
| 最近记录: |