Phe*_*ter 11 xcode core-data objective-c ios
我有一个允许用户保存收藏夹的应用程序.我使用Core Data将收藏夹存储为托管对象.我已经编写了一些代码来防止存储重复项的可能性,但我想知道是否有更好的方法来执行此操作.每个喜欢的对象都有一个唯一的ID字段.在下面的代码中,我只是循环并检查ID字段,如果该值已经存在,则将标志值设置为true,并打破循环.
-(BOOL)addFavorite{
BOOL entityExists = NO;
if(context){
// does this favorite already exist?
NSArray *allFaves = [AppDataAccess getAllFavorites];
for(Favorite *f in allFaves){
if([f.stationIdentifier isEqualToString:stID]){
entityExists = YES;
break;
}
}
if(!entityExists){
NSError *err = nil;
Favorite *fave = [Favorite insertInManagedObjectContext:context];
fave.stationRealName = riverGauge.name;
fave.stationIdentifier = stID;
fave.stationState = @"WV";
if(![context save:&err]){
NSLog(@"ERROR: Could not save context--%@", err);
}
return YES;
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
我想知道Core Data是否能够检查添加的对象是否重复.是否有可以处理重复检查的谓词?谢谢!
Dai*_*jan 19
CoreData本身并不是唯一的.它没有两个条目相同的概念.
要启用此类行为,您必须通过执行"在插入前搜索"(也称为"在创建之前获取")来自行实现此行为.
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"Favorite"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"stationIdentifier == %@", stID];
[fetch setPredicate:predicate];
YourObject *obj = [ctx executeRequest:fetch];
if(!obj) {
//not there so create it and save
obj = [ctx insertNewManagedObjectForEntity:@"Favorite"]; //typed inline, dont know actual method
obj.stationIdentifier = stID;
[ctx save];
}
//use obj... e.g.
NSLog(@"%@", obj.stationIdentifier);
Run Code Online (Sandbox Code Playgroud)
雨燕4
func isEntityAttributeExist(id: Int, entityName: String) -> Bool {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
fetchRequest.predicate = NSPredicate(format: "id == %@", id)
let res = try! managedContext.fetch(fetchRequest)
return res.count > 0 ? true : false
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特3:
func isExist(id: Int) -> Bool {
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: myEntityName)
fetchRequest.predicate = NSPredicate(format: "id = %d", argumentArray: id)
let res = try! theContext.fetch(fetchRequest)
return res.count > 0 ? true : false
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15973 次 |
| 最近记录: |