2017-08-15 14 views
0

私は、スワイプがtableviewcell関数を削除するたびにコアデータ属性値に5を加算するアプリケーションを使用しています。コミットeditingStyleクラス内のコードは次のようになりhttps://i.stack.imgur.com/16YR6.pngCantはUITableViewが空の場合にCoreData属性値を取得します

if editingStyle == UITableViewCellEditingStyle.delete{ 

     let fetchRequest: NSFetchRequest<Goal> = Goal.fetchRequest() 
     do { 
      let array_users = try context.fetch(fetchRequest) 

      let user = array_users[0] 
      var count: Int64 = user.value(forKey: "totalGold") as! Int64 
      count += 5 
      user.setValue(count, forKey: "totalGold") 
      let str = String(describing: user.value(forKey: "totalGold") as! Int64) 
      totalGold.text = str 
      do { 
       try context.save() 
       print("saved!") 
      } catch let error as NSError { 
       print("Could not save \(error), \(error.userInfo)") 
      } catch { 

      } 

      } 

      catch { 
      print("Error with request: \(error)") 
      } 
let managedObject: NSManagedObject = controller.object(at: indexPath) as NSManagedObject; 
     context.delete(managedObject) 
     ad.saveContext() 
    } 
} 

その後、私はそうのように、のviewDidLoadで同じフェッチ・プロセスを使用します。

let fetchRequest: NSFetchRequest<Goal> = Goal.fetchRequest() 
    do { 

     let array_users = try context.fetch(fetchRequest) 

     let user = array_users[0] 
     let count: Int64 = user.value(forKey: "totalGold") as! Int64 
     user.setValue(count, forKey: "totalGold") 
     let str = String(describing: user.value(forKey: "totalGold") as! Int64) 
     totalGold.text = str 




     //save the context 
     do { 
      try context.save() 
      print("saved!") 
     } catch let error as NSError { 
      print("Could not save \(error), \(error.userInfo)") 
     } catch { 

     } 

     } catch { 
     print("Error with request: \(error)") 
    } 

このコードは、のために正常に動作コアデータの設定は次のようになりますテーブルビューにテーブルビューセルがない場合を除き、すべてのケース。その後、私は何の細胞が存在しない一方でビューを再ロードしようとすると、行にフェッチしようとしている間、私は範囲エラー外のインデックスを取得:

明らか
let user = array_users[0] 

、これは私がしようという事実によるものですtotalGoldの最新の値を取得するには、それを見つけることができず、theresに値がないと考えるので、私は間違ったフェッチをしています。 totalGoldの最新の属性値を正しく取得するにはどうすればよいですか?

答えて

0

あなたはこれで問題が解決しないいくつかの理由について条件

let fetchRequest: NSFetchRequest<Goal> = Goal.fetchRequest() 
    do { 
     let array_users = try context.fetch(fetchRequest) 
     if array_users.count > 0 { 
      let user = array_users[0] 
      let count: Int64 = user.value(forKey: "totalGold") as! Int64 
      user.setValue(count, forKey: "totalGold") 
      let str = String(describing: user.value(forKey: "totalGold") as! Int64) 
      totalGold.text = str 

      //save the context 
      do { 
       try context.save() 
       print("saved!") 
      } catch let error as NSError { 
       print("Could not save \(error), \(error.userInfo)") 
      } catch { 
      } 
     } 
    } catch { 
     print("Error with request: \(error)") 
    } 
+0

のものを置くことができます。ビューがロードされると、totalGold属性の値がリセットされ、テキストラベルのデフォルト値のように「0」が読み込まれます。 –

関連する問題