Sjo*_*ost 8 validation core-data ios
我在Core Data中有一个实体,它有一个需要唯一的属性.没有办法在可视化界面中设置它.我假设我需要创建一个继承自NSManagedObject的自定义类,然后编写自己的验证方法.
我通过在可视化编辑器中选择实体并选择文件 - >新建 - >新建文件 - > NSManagedObject子类,成功创建了自定义类.我用它来添加创建时间戳,所以我知道它有效.
但现在呢?我需要哪些方法?
该NSManagedObject参考指南告诉我"实现形式验证的方法:错误:"但没有提供一个例子.
一个完整的例子很棒,但是非常感谢任何帮助.
假设您有一个foo要验证的属性
来自物业级验证:
如果除了在托管对象模型中提供的约束之外还要实现逻辑,则不应覆盖
validateValue:forKey:error:.相反,您应该实现表单的方法validate<Key>:error:.
<Key>你的财产在哪里?你实际上会实现类似的东西:
-(BOOL)validateFoo:(id *)ioValue error:(NSError **)outError {
return [self isUnique];
}
Run Code Online (Sandbox Code Playgroud)
这确实有效,尽管批量插入速度很慢并且您仍然需要创建一个 NSError 对象。
-(BOOL)validateValue:(__autoreleasing id *)value forKey:(NSString *)key error:(NSError *__autoreleasing *)error {
[super validateValue:value forKey:key error:error];
// Validate uniqueness of my_unique_id
if([key isEqualToString:@"my_unique_id"]) {
NSFetchRequest * fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:[self.entity name]
inManagedObjectContext:self.managedObjectContext]];
NSPredicate *predicate = [NSPredicate
predicateWithFormat:@"my_unique_id = %@",[self valueForKey:key]];
fetch.predicate = predicate;
NSError *error = nil;
NSUInteger count = [self.managedObjectContext
countForFetchRequest:fetch error:&error];
if (count > 1) {
// Produce error message...
// Failed validation:
return NO;
}
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3639 次 |
| 最近记录: |