2016-02-09 68 views
-1

enter image description here我想刪除其通過用戶

func OnDelPressed(){ 

    let selectedItem = self.collection.indexPathsForSelectedItems() 
    print(selectedItem?.count) 
    deleteItemsAtIndexPaths(selectedItem!) 

} 
func deleteItemsAtIndexPaths(indexPaths: [NSIndexPath]){ 
    for indexpath in indexPaths{ 
     //print(photos[indexpath.item]) 
     print("index number is: \(indexpath.row)") 
     print(photos[indexpath.row]) 
     print("number of photos are :\(photos.count)") 

     let app = UIApplication.sharedApplication().delegate as! AppDelegate 
     let context = app.managedObjectContext 

     let photo = photos[indexpath.row] as NSManagedObject 
     context.deleteObject(photo) 
     do{ 
      photos.removeAtIndex(indexpath.item) 
      try context.save() 

     }catch{ 
      let saveError = error as NSError 
      print(saveError) 
     } 
     collection.reloadData() 

    } 
} 

選擇我可以刪除兩張照片在單個時間。當時我選擇三個相片它給界錯誤的數組索引多張照片。我現在沒有想法!

+0

發佈您的代碼並添加說明 – jbcd13

回答

0

從陣列中刪除一個項目後,您的索引路徑不再保證有效。

for indexpath in indexPaths{ 
    ... 
    context.deleteObject(photo) 
    do { 
     photos.removeAtIndex(indexpath.item) 
     try context.save() 

當您從您的陣列的照片,你在改變數組中的項目數,但指數仍然路徑指的是項目的位置在數組中已刪除的東西了。因此,如果您的數組是[a, b, c],並且您刪除索引爲0的項目,然後刪除索引爲2的項目,則您的數組將變爲[b, c],並且索引2中不再有項目,因此它崩潰。如果你倒退(刪除索引2處的項目,然後刪除索引0處的項目),它將按你的意願工作。

0

歡迎來到呃編程的世界。當您在編程中通過索引編號進行循環刪除時,您需要從末尾向後循環。舉例來說,如果你有4點東西,刪除索引3,然後將索引2,然後將索引1,那麼一個索引0

一個如果不這樣做,你會出現界限錯誤。想想看。想象一下,我們有4個項目的數組,我們從0到3循環刪除它們。所以:

  1. 我們刪除索引0。現在一切都向下移動一個,所以數組索引0,1東西,和2

  2. 我們刪除一個索引1(失蹤現在在索引0的那個,這已經是一個錯誤)。現在,數組索引0和1

  3. 我們試圖刪除一個索引2和崩潰的東西,因爲沒有這樣的索引不再。

然而,如果我們簡單地刪除了一個索引3,然後將索引2,然後將索引1,那麼將索引0,一切都將是罰款。

0

謝謝。我做這個

` func deleteItemsAtIndexPaths(indexPaths: [NSIndexPath]){ 
    var indexRef:[Int]! 
    var secondIndexRef:[Int]! 
    if clearImageData > 0{ 
     saveValue.removeAll() 
    } 
    for indexpath in indexPaths{ 
      indexRef = [indexpath.row] 
      secondIndexRef = appendValue(indexRef) 
    } 
    secondIndexRef = secondIndexRef.sort{$0 > $1} 
    print(secondIndexRef) 
    for values in secondIndexRef{ 
     let app = UIApplication.sharedApplication().delegate as! AppDelegate 
     let context = app.managedObjectContext 
     print (values) 
     let photo = photos[values] as NSManagedObject 
     context.deleteObject(photo) 
     do{ 

      photos.removeAtIndex(values) 
      try context.save() 
      clearImageData++ 

     }catch{ 
      let saveError = error as NSError 
      print(saveError) 
     } 
     collection.reloadData() 

    } 
} 
func appendValue(getValue:[Int])->[Int]{ 
    saveValue = saveValue + getValue 
    return saveValue 
} 

`

+0

解決了這個錯誤。如果上述任何答案幫你去解決你應該將其標記給他們的信用爲接受和/或上投票。 –

+0

Okie。我去做 – Davin