Tag: nsvaluetransformer

核心数据直接在代码中获取/设置属性时,不会自动调用值转换器

如果我理解正确,核心数据可转换属性背后的想法是: 在+transformedValueClass实现一个带有返回[NSData class]的NSValueTransformer子[NSData class]以及用于转换的实现 在+load或+initialize注册变压器 将实体的属性设置为可转换的 在xcode模型编辑器中为属性设置您的转换器的名称(您用来注册它的名称)。 在这一点上,我期望访问或设置适当的实体types的managedObject属性将触发值转换器。 但是,我正在使用AFIncrementalStore的应用程序中testing这个,我得到以下行为: A – 在+load或+initialize中注册变压器似乎没有必要; 核心数据无论如何发现它(虽然提前阅读)。 B – 通过AFIncrementalStore获取请求AFIncrementalStore会触发变压器。 例如,我从获取请求中获取JSON,并将响应字典映射到managedObject时,转换器被触发,并将合适的字典密钥转换为对象中的NSData 。 C – 但是,如果我尝试通过代码设置或获取属性,则不会调用变换器。 这就是像myManagedObject.myAttribute = @"hello"不会触发从NSString到NSData的转换, NSString *myString = myManagedObject.myAttribute也不会触发从NSData到NSString的转换。 那么我错过了什么? 我认为这个想法是CoreData会自动调用变压器。 我错了吗? 根据这个问题: 为什么我的可变形的核心数据属性不使用我的自定义NSValueTransformer? 这似乎是苹果框架中的一个错误。 但是,抛出我的是通过AFIncrementalStore值变换器调用。 也许关键是通过代码设置一个属性我不是真的触发AFIncrementalStore,所以更改只是在内存中?

将自定义类保存到Coredata中

您好,我已经使用属性types可转换,我已经遵循论坛的其中一个归档的程序。 但它说 CoreData:警告:没有在实体“SurveyData”上find类名为“SurveyResults”的属性“survey”的NSValueTransformer 2013-04-30 09:44:16.022 TestReachability [11641:c07] – [SurveyApplication encodeWithCoder:]:无法识别的select器已发送实例0x845cb00 2013-04-30 09:44:16.023 TestReachability [11641:c07] *由于未捕获的exception'NSInvalidArgumentException',原因:' – [SurveyApplication encodeWithCoder:]:无法识别的select器发送到实例0x845cb00' 这是我的代码 SurveyApplication *survey =[[SurveyApplication alloc]init]; survey.name=@"dheeraj"; survey.phone=@"573-356-2598"; NSManagedObject *aStory = [NSEntityDescription insertNewObjectForEntityForName:@"SurveyData"inManagedObjectContext:self.managedObjectContext]; [aStory setValue:survey forKey:@"survey"]; NSError *saveError = [[NSError alloc]init]; if (![self.managedObjectContext save:&saveError]) { NSLog(@"%@",saveError); } SurveyAppplication对象是我的自定义类,并试图创build一个对象,然后存储它的核心数据。请你帮我。 谢谢Dheeraj

核心数据encryption

我有一个关于核心数据encryption的问题。 我在Core Data SQLite数据库中存储了一些敏感的用户数据。 临界值都是可变换的,我正在使用AES256对它们进行encryption和解密,包括每个值的个人IV。 encryption密钥是用户select的密码的SHA512散列。 迄今为止,这工作得很好。 现在关于用户密码。 当用户启动应用程序时,他被要求input密码。 密码正在用SHA512散列并存储在iOS钥匙串中。 对于每个写入或读取操作,NSValueTransformer将从钥匙串获取密码。 如果应用程序正在closures,我将从密钥链中删除密码哈希。 在我的核心数据库中,我有一个特殊的实体,它有一个随机数!= 0,因为它只是一个值。 为了testing用户是否input了正确的密码,我获取这个实体并读取数字。 如果是=! 0,我知道密码是正确的,因为当解密失败NSValueTransformer总是返回0。 现在我的实际问题:你认为这是一个很好的encryption方法? 如果input的密码是正确的,你还会怎么testing? 我有点担心在应用程序运行时将密码哈希存储在钥匙串中会使得一切都变慢,因为NSValueTransformer必须始终访问钥匙串。 将密码散列保存在内存中是否足够安全,所以应用程序closures时会被删除?