rob*_*jam 35 iphone xcode cocoa-touch objective-c
是否可以使Core Data属性唯一,即没有两个MyEntity对象可以具有相同的myAttribute?
我知道如何以编程方式强制执行此操作,但我希望有一种方法可以使用xcode中的图形数据模型编辑器来实现.
我正在使用iPhone 3.1.2 SDK.
doo*_*Men 28
每次我在对象上创建时,我都会执行一个类方法,只有当另一个实体不存在时才会生成新实体.
+ (TZUser *)userWithUniqueUserId:(NSString *)uniqueUserId inManagedObjectContext:(NSManagedObjectContext *)context
{
TZUser *user = nil;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"TZUser" inManagedObjectContext:context];
request.predicate = [NSPredicate predicateWithFormat:@"objectId = %@", uniqueUserId];
NSError *executeFetchError = nil;
user = [[context executeFetchRequest:request error:&executeFetchError] lastObject];
if (executeFetchError) {
NSLog(@"[%@, %@] error looking up user with id: %i with error: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), [uniqueUserId intValue], [executeFetchError localizedDescription]);
} else if (!user) {
user = [NSEntityDescription insertNewObjectForEntityForName:@"TZUser"
inManagedObjectContext:context];
}
return user;
}
Run Code Online (Sandbox Code Playgroud)
rob*_*jam 12
我已决定使用该validate<key>:error:
方法检查是否已存在具有特定值的托管对象<key>
.如果是这种情况,则会引发错误.
例如:
- (BOOL)validateMyAttribute:(id *)value error:(NSError **)error { // Return NO if there is already an object with a myAtribute of value }
感谢Martin Cote的投入.
从IOS 9开始,有一种新方法可以处理独特的约束.
您可以在数据模型中定义唯一属性.
您需要设置托管上下文合并策略"合并策略单例对象,定义在保存操作期间处理冲突的标准方法"NSErrorMergePolicy是默认值,如果存在任何合并冲突,此策略会导致保存失败.
- (NSManagedObjectContext *)managedObjectContext {
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (!coordinator) {
return nil;
}
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
[_managedObjectContext setMergePolicy:NSOverwriteMergePolicy];
return _managedObjectContext;
}
Run Code Online (Sandbox Code Playgroud)
Apple Ducumentation合并政策中讨论了各种选项
Zachary Orr的回答很好地 回答了这个问题
他还亲切地创建了一个博客文章和示例代码.
最具挑战性的部分是使数据模型属性可编辑.在单击+符号添加约束后,单击左键然后单击鼠标右键.