2017-07-26 7 views
1

私は学生のデータを格納する "Student"という名前のエンティティを持っています。生徒の携帯電話番号は一意でなければなりません。私はコアデータに学生の新しいエンティティを挿入するときにそれを検証しました。現在、既存の生徒データを更新しようとするときに問題が発生すると、常に更新される同じオブジェクトが返されます。私は学生のNSManagedbjectを持っており、私はそれをフェッチ要求で除外したい。ここでコアデータ:即時にフェッチ要求でNSManagedObjectを除外します

は私のコードです:上記のコードでは

let request = NSFetchRequest<NSFetchRequestResult>(entityName:"Student") 
request.predicate = NSPredicate(format:"mobile == %@", "1234567890") 
do { 
    let count = try context.count(for:request) 
} catch { 
     print(error.localizedDescription) 
} 

私は常に既存の学生

+1

をあなたのコアデータコードを与える、あなたの問題を解決することがあります。または確認してください:https://stackoverflow.com/questions/40756178/how-can-i-delete-object-from-core-data-in-swift-3/40756625#40756625 –

+0

質問にあなたのコードを含めてください。 1つは、適切な情報なしであなたを助けることはできません – UmarZaii

+0

上記のURLのリンクを確認しました –

答えて

0

を更新するときに、私は以下のようにNSPredicateを使用してこれを行っている1つのレコードを取得しています:

let predicate = NSPredicate(format:"NOT (self IN %@)",[arrayofNSManagedObjects]) 


public static func checkUniqueStudent(mobile:String,student:NSManagedObject? = nil) -> Bool { 

    guard let context = DBManager.shared.managedObjectContext else { return true } 

    let request = NSFetchRequest<NSFetchRequestResult>(entityName:"Student") 

    let titlePredicate = NSPredicate(format: "mobile == %@", mobile) 

    var predicateArray:[NSPredicate] = [ 
     titlePredicate, 
    ] 

    //here I checked if we are updating an existing record 
    if student != nil { 
     let studentPredicate = NSPredicate(format: "NOT (self IN %@)", [student!]) 
     predicateArray.append(studentPredicate) 
    } 

    let compoundPredicate = NSCompoundPredicate(type: .and, subpredicates: predicateArray) 

    request.predicate = compoundPredicate 

    do { 
     let count = try context.count(for: request) 

     if count > 0 { 
      return true 
     } else { 
      return false 
     } 

    } catch { 
     print(error.localizedDescription) 
    } 

    return true 
} 
関連する問題