Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 核心数据获取数据并查找重复数据_Ios_Swift_Core Data - Fatal编程技术网

Ios 核心数据获取数据并查找重复数据

Ios 核心数据获取数据并查找重复数据,ios,swift,core-data,Ios,Swift,Core Data,我想从核心数据中提取数据并寻找副本,然后只保存数据,这样就不会有电影ID的副本。 也许有人能帮我 如何将结果与movieid字符串进行比较 let request = NSFetchRequest<NSFetchRequestResult>(entityName: "MovieData") //request.predicate = NSPredicate(format: "movieid = %@", movieID) request.returns

我想从核心数据中提取数据并寻找副本,然后只保存数据,这样就不会有电影ID的副本。 也许有人能帮我

如何将结果与movieid字符串进行比较

let request = NSFetchRequest<NSFetchRequestResult>(entityName: "MovieData")
        //request.predicate = NSPredicate(format: "movieid = %@", movieID)
        request.returnsObjectsAsFaults = false
        do {
            let result = try context.fetch(request)
            for data in result as! [NSManagedObject] {
               print(data.value(forKey: "movieid") as! String)
          }

        } catch {

            print("Failed")
        }
let request=NSFetchRequest(entityName:“MovieData”)
//request.predicate=NSPredicate(格式:“movieid=%@”,movieid)
request.returnsObjectsAsFaults=false
做{
let result=try context.fetch(请求)
对于结果中的数据![NSManagedObject]{
打印(data.value(forKey:“movieid”)为!字符串)
}
}抓住{
打印(“失败”)
}

在核心数据中保存时,您需要创建谓词,并在其中检查是否已使用相同的“movieid”保存了值,然后必须对其进行更新,这样您就不会有重复的数据。请参考该方法,并尝试使用相同的方法将值保存在DB中。这样,重复的值将不会保存在DB中

class func insertupdaterecord (movieID:String, context: NSManagedObjectContext)
{
    let entityDescription = NSEntityDescription.entity(forEntityName: "movie", in: context)
    let pred = NSPredicate(format: "movieid = %@", movieID)

    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "movie")
    fetchRequest.entity    = entityDescription
    fetchRequest.predicate = pred

    let result = try! (context.fetch(fetchRequest) as NSArray).lastObject
    let updateInsertInfo : movie

    if result != nil
    {
        updateInsertInfo               = result as! movie
    }
    else
    {
        print("Record not found!")
    }
    do
    {
        try context.save()
    }
    catch let error as NSError
    {
        print("Error while saving \(error) in database.")
    }
}
class func insertupdaterecord(电影ID:String,上下文:NSManagedObjectContext)
{
让entityDescription=NSEntityDescription.entity(在:上下文中,名为“电影”)
让pred=NSPredicate(格式:“movieid=%@”,movieid)
let fetchRequest=NSFetchRequest(entityName:“电影”)
fetchRequest.entity=entityDescription
fetchRequest.predicate=pred
让result=try!(context.fetch(fetchRequest)作为NSArray.lastObject
让我们更新InsertInfo:电影
如果结果为!=nil
{
updateInsertInfo=结果为!电影
}
其他的
{
打印(“未找到记录!”)
}
做
{
尝试context.save()
}
将let错误捕获为NSError
{
打印(“在数据库中保存\(错误)时出错。”)
}
}

movieid
值创建缓存,以检查重复项并循环获取的结果,删除缓存中已存在
movieid
的任何对象,然后在循环完成后保存

var selection: [String] = []
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "MovieData")

request.returnsObjectsAsFaults = false
do {
    let result = try context.fetch(request)
    for data in result as! [NSManagedObject] {
        guard let movieId = data.value(forKey: "movieid") as? String else {
            context.delete(data) // or however you want to handle this situation
            continue
        }
        if selection.contains(movieId) {
            context.delete(data)
        } else {
            selection.append(movieId)
        }
    }
    try context.save()
} catch {
    print("Failed")
}
var选择:[String]=[]
let request=NSFetchRequest(entityName:“MovieData”)
request.returnsObjectsAsFaults=false
做{
let result=try context.fetch(请求)
对于结果中的数据![NSManagedObject]{
guard let movieId=data.value(forKey:“movieId”)作为?字符串else{
context.delete(data)//或以您希望的方式处理此情况
持续
}
如果选择.contains(电影ID){
context.delete(数据)
}否则{
选择。追加(电影ID)
}
}
尝试context.save()
}抓住{
打印(“失败”)
}

差不多了。应用谓词仅获取具有特定
movieID
的记录。但是,它假定
movieID
是一个对象(
NSNumber
),如果它是标量
Int
,则必须使用
%ld
作为占位符

如果提取返回空数组,则不存在重复项,您可以插入新对象

let request = NSFetchRequest<NSManagedObject>(entityName: "MovieData")
request.predicate = NSPredicate(format: "movieid = %@", movieID)
do {
    let result = try context.fetch(request)
    if result.isEmpty {
        let newMovie = NSEntityDescription.insertNewObject(forEntityName: "MovieData", into: context) as! MovieData
        newMovie.movieid = movieID
        try context.save()
    }      
} catch {
    print(error)
}
let request=NSFetchRequest(entityName:“MovieData”)
request.predicate=NSPredicate(格式:“movieid=%@”,movieid)
做{
let result=try context.fetch(请求)
如果结果是空的{
让newMovie=NSEntityDescription.insertNewObject(forEntityName:“MovieData”,插入:context)作为!MovieData
newMovie.movieid=movieid
尝试context.save()
}      
}抓住{
打印(错误)
}