2017-09-29 1 views
0

웹 서비스에서 데이터를 가져 와서 핵심 데이터로 저장합니다. 웹 서비스에서 신선한 데이터를 가져올 때 이미 저장된 데이터가 포함되어 있습니다. 코어 데이터에는 웹 서비스에서 제공 한 각 데이터 세트의 고유 ID가 저장됩니다. 현재 구현에서는 고유 ID가있는 집합의 여러 인스턴스를 저장합니다. 그러나 나는 기존의 것을 남겨두고 새로운 것을 무시하고 싶습니다. 또는 어쨌든 동일하기 때문에 새로운 것이 기존의 것을 덮어 씁니다. 여기에 접근 방법은 무엇입니까?CoreData 새 데이터를 삽입하고 기존 데이터를 그대로두고

+0

시도를 감사하고 고유 ID를 가진 기존 개체를 가져 당신에게

//MARK:- get if ClassRoom Exist func getClassroom(_ classRooMID:String) -> Classroom? { var allClassroom:[Classroom]! let request = Classroom.getFetchRequest() let keyVal = classRooMID request.predicate = NSPredicate.init(format: "classroomid = %@", argumentArray: [keyVal]) do { allClassroom = try managedObjectContext.fetch(request) as! [Classroom] } catch let error as NSError{ // failure print("Fetch failed: \(error.localizedDescription)") } if allClassroom.count != 0 { return allClassroom[0] } return nil } 

도움이 될; 객체를 얻지 못하면 새 객체를 삽입하십시오. – Paulw11

+0

일반적으로 앱을 서버와 동기화하는 것이 좋습니다. 서버에서 오는 모든 것을 업데이트하십시오. – kirander

+0

뭘 설명해 주시겠습니까? 덮어 쓰기를 원 하시겠습니까? 덮어 쓰지 않으려면이 링크 구현을 보시기 바랍니다. https://github.com/Gagan5278/DemoApps/blob/master/TwitterDemo/TwitterDemo/Model/TwitterUser%2BCoreDataClass.swift 이 코드에서 무시할 수있는 ' checkForObjectCountWithIdentifier '함수를 호출합니다. 또한 더 나은 성능을 위해 일괄 저장을 구현하십시오. –

답변

0

먼저

덕분에, 당신은 API에서 제공되는 새로운 객체가 uniqID를 사용하여 데이터베이스에 존재하는지 확인해야합니다. 그렇다면 새로운 객체를 삽입 할 수 없다면 이전 객체를 새로운 객체로 덮어 씁니다. 새로운 객체를 삽입하는 동안

따르 샘플 코드는

//MARK:- InsertClassroom Data 
    func insertClassroomData(_ classRoomDict:NSDictionary) -> Classroom { 
     let keyValue = classRoomDict[KEY_CLASS_ROOM_ID] as! String 
     var classroomObj = self.getClassroom(keyValue) 

     if (classroomObj == nil){ 
      classroomObj = NSEntityDescription.insertNewObject(forEntityName: "Classroom", into: managedObjectContext) as? Classroom 
     } 
     classroomObj!.setClassroomFromDict(classRoomDict) 

     return classroomObj! 
    } 

당신에게

0
class func defaultInsert(data:[String:Any]) -> AppLabels { 
    var label = self.fetchLabelFromLabelUsingVarID(var_id: data["var_id"] as! String,screen: data["name"] as! String) 
    if label == nil{ 
     label = NSEntityDescription.insertNewObject(forEntityName: "AppLabels", into: CoreDataStack.managedObjectContext) as? AppLabels 
    } 
    if data["var_id"] != nil { 
     label?.var_id = data["var_id"] as? String 
    } 
    if data["name"] != nil { 
     label?.name = data["name"] as? String 
    } 
    if data["value"] != nil { 
     label?.value = data["value"] as? String 
    } 
    if data["var_name"] != nil { 
     label?.var_name = data["var_name"] as? String 
    } 

    return label!; 
} 
class func fetchLabelFromLabelUsingVarID (var_id:String,screen:String) -> AppLabels? { 
    let fetchrequest = NSFetchRequest<AppLabels>(entityName: "AppLabels") 
    fetchrequest.predicate = NSPredicate(format: "var_id == %@ && name == %@", var_id,screen); 
    fetchrequest.fetchLimit = 1; 
    do { 
     let fetchedResults = try CoreDataStack.managedObjectContext.fetch(fetchrequest) 
     if let applabel = fetchedResults.first { 
      return applabel 
     } 
    } 
    catch{ 

    } 
    return nil; 
} 
+0

답안 코드에 대한 자세한 내용을 추가하면 문제 해결에 도움이되지 않습니다. – CodeChanger

관련 문제