2017-01-06 7 views
0

私は、ユーザーが私のアプリからログアウトすると、CoreDataが以下の関数で消去されるようにしようとしています。CoreDataが行を返さない

func wipeMessagesFromDB(){ 
    let moc = managedObjectContext 

    var array = [cdMessageMO]() 

    let messageFetch: NSFetchRequest<cdMessageMO> = NSFetchRequest(entityName: "Message") 

    do { 
     array = try moc.fetch(messageFetch as! NSFetchRequest<NSFetchRequestResult>) as! [cdMessageMO]//this isnt fucking working! 
     for managedObject in array 
     { 
      let managedObjectData:NSManagedObject = managedObject as NSManagedObject 
      managedObjectContext.delete(managedObjectData) 
     } 
    } catch { 
     fatalError("Failed to fetch attractions: \(error)") 
    } 
} 

問題は、ユーザーがログアウトしたときに関数を呼び出すと配列の長さが0になるため、何も消去されないということです。長さが0であってはならないため、これは悪いです。私は起動時に同じ関数を呼び出すと、配列が移入されるため、返されるはずのエントリが100%あります。

これを引き起こす原因に関するアイデアはありますか?

答えて

1

メッセージはまた、私はそれは常に失敗しますかなり確信して署名NSFetchRequest<cdMessageMO>

let messageFetch: NSFetchRequest<cdMessageMO> 

を持っている。しかし、あなたがNSFetchRequest<NSFetchRequestResult>

array = try moc.fetch(messageFetch as! NSFetchRequest<NSFetchRequestResult>) as! [cdMessageMO] 

にキャスト力だ(?)

をフェッチ、あなたがメッセージを使って何もしていない場合(単に削除したい場合)、実際にはロードされないので、より速いバッチ削除を使用することができますオブジェクトをメモリに入れます:

let context = managedObjectContext 

let fetch = NSFetchRequest(entityName: "Message") 
let delete = NSBatchDeleteRequest(fetchRequest: fetch) 

do { 
    try myPersistentStoreCoordinator.executeRequest(delete, withContext: context) 
} catch { 
    // handle the error 
} 
関連する問題