2017-11-17 9 views
0

私の現在のプロジェクトでは、(イメージ属性)のようなデータをcoredataに保存していますが、即座にフェッチしている間は、データの正確な数がわかりません。私が保存したものよりもデータの数が多いです。しかし、ログにはすべてのデータが正常に保存されていることが示されています。私の探求はフェッチ前です。ログが表示されるので、データが正しく保存されていないという疑問はありません。この問題のcoredataで同時に保存してフェッチする方法swift3

FUNC saveImageDetails(aImage:UIImage ?, IMAGEURL:文字列!, phAsset:PHAsset !,のobjectType:文字列、OBJECTID:文字列、objectNameの:文字列、ロケーション:String)を{

if let newImage = aImage { 

     let date = HelpherMethod.sharedInstance().toLocalTime(Date()) 
     let resource = PHAssetResource.assetResources(for: phAsset!).first 
     let fileName = resource?.originalFilename 
     var imageName : String? 
     let timestamp = date?.timeIntervalSince1970 
     print(String(format:"%.0f",timestamp!)) 
     let currentTimeStamp = String(format:"%.0f",timestamp!) 
     imageName = String(format:"%@_%@",AuthService.instance.userName,currentTimeStamp) 

     let mImage = self.objectWithTypePredicate(aType: "Image", predicate: NSPredicate(format:"(imageName == %@)",imageName!), canCreate: true) 

     mImage?.setValue(fileName, forKey: "fileName") 
     mImage?.setValue(date, forKey: "dateTime") 
     mImage?.setValue(objectId, forKey: "objectId") 
     mImage?.setValue(objectType, forKey: "objectType") 
     mImage?.setValue(objectName, forKey: "objectName") 
     mImage?.setValue(newImage, forKey: "image") 
     mImage?.setValue(imageName, forKey: "imageName") 
     mImage?.setValue(imageUrl, forKey: "imageUrl") 
     if let loc = location { 
      mImage?.setValue(loc, forKey: "location") 
     } 
     mImage?.setValue("progress", forKey: "status") //Status failed for not uploaded // progress for processing// success for sync// at the initial level all status are set to progress 
     do { 
      try mImage?.managedObjectContext?.save() 
     } catch { 
      fatalError("Failure to save context: \(error)") 
     } 
    } 

}

(?:文字列、sortingKey:文字列、isAscending:ブール、述語:NSPredicate、isAllrecord:エンティティネームブール値)coredataから

FUNCのfetchRecordsWithClassNameをfethcing

// - >配列{

 let managedContext = PLMCoreDataInstance.managedObjectContext 
    // Initialize Fetch Request 
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>() as NSFetchRequest 
    //create entity description 
    let entityDescription = NSEntityDescription.entity(forEntityName: entityName, in: managedContext!) 
    let sortDescriptor = NSSortDescriptor(key: sortingKey, ascending: isAscending) 
    fetchRequest.sortDescriptors = [sortDescriptor] 
    // optional chaining 
    if let newPredicate = predicate { 
     fetchRequest.predicate = newPredicate 
    } 
    //Configure fetch Request 
    fetchRequest.entity = entityDescription 
    do { 
     if let results = try? managedContext?.fetch(fetchRequest) { 
      return results! 
     } 
    } 
    return [] 
} 
+0

フェッチする前に保存してください。あなたは書いた後にコードでそれをやっていますか? – ahmed

+0

コアレターに書き込んだ後、私はちょうどフェッチしています –

+0

書くことによって私はあなたのコンテキストを保存するのですか? – ahmed

答えて

0

のViewController - 1: ====================> 輸入のUIKit

輸入CoreData

クラスのViewController-1: UIViewController、UITableViewDelegate、UITableViewDataSource

{

@IBOutlet var table_view: UITableView! 

var my_data_array = NSMutableArray() 

var data_array = NSMutableArray() 

var data_fet:[NSManagedObject] = [] 



override func viewDidLoad() 

{ 

    super.viewDidLoad() 

    // Do any additional setup after loading the view, typically from a nib. 

} 

override func viewWillAppear(_ animated: Bool) 

{ 

    let app = UIApplication.shared.delegate as! AppDelegate 



    let context_view = app.persistentContainer.viewContext 



    let fetch_data = NSFetchRequest<NSManagedObject>(entityName: "Student_detail") 

    do 

    { 

//

 data_array = try context_view.fetch(fetch_data as! NSFetchRequest<NSFetchRequestResult>) as! NSMutableArray 

     print("this is array",data_array) 

    } 

    catch let error as NSError 

    { 

     print(error) 

    } 

    table_view.reloadData() 

} 

func numberOfSections(in tableView: UITableView) -> Int 

{ 

    return 1 

} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

{ 

    return data_array.count 

} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

{ 

    let t_cell = tableView.dequeueReusableCell(withIdentifier: "cell_data", for: indexPath) as! TableViewCell_data_view 

    let result_data = data_array[indexPath.row] 

    t_cell.t_std_name.text = (result_data as AnyObject).value(forKey: "stdName") as? String 

    t_cell.t_roll_no.text = (result_data as AnyObject).value(forKey: "stdRoll") as? String 

    t_cell.t_std_dept.text = (result_data as AnyObject).value(forKey: "stdDept") as? String 

    t_cell.t_grade.text = (result_data as AnyObject).value(forKey: "stdGrade") as? String 

    t_cell.t_img_view.image = UIImage(data: (result_data as AnyObject).value(forKey: "stdImage") as! Data) 



    return t_cell 

} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

{ 

    performSegue(withIdentifier: "data_passing", sender: self) 

} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 

{ 

    if segue.identifier == "data_passing" 

    { 

     let view_c = segue.destination as! ViewController_Register 

     let index_path = table_view.indexPathForSelectedRow 





     let update_std_result = self.data_array[(index_path?.row)!] 

     view_c.data_result = update_std_result as! NSManagedObject 

    } 

} 

のViewController - 2:

=====================>

輸入のUIKit

輸入CoreData

クラスViewController_Register:のUIViewController、UIImagePickerControllerDelegate、UINavigationControllerDelegate

{

@IBOutlet var std_name: UITextField! 

@IBOutlet var std_roll: UITextField! 

@IBOutlet var std_dept: UITextField! 

@IBOutlet var std_grade: UITextField! 

@IBOutlet var std_image: UIImageView! 



var data_result:NSManagedObject! 



override func viewDidLoad() 

{ 

    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

    std_image.isUserInteractionEnabled = true 

    if data_result != nil 

    { 

     std_name.text = data_result.value(forKey: "stdName") as? String 

     std_roll.text = data_result.value(forKey: "stdRoll") as? String 

     std_dept.text = data_result.value(forKey: "stdDept") as? String 

     std_grade.text = data_result.value(forKey: "stdGrade") as? String 

     std_image.image = UIImage(data: data_result.value(forKey: "stdImage") as! Data) 

    } 

} 

override func didReceiveMemoryWarning() { 

    super.didReceiveMemoryWarning() 

    // Dispose of any resources that can be recreated. 

} 

@IBAction func image_action(_ sender: UITapGestureRecognizer) 

{ 

    let img_pick = UIImagePickerController() 

    img_pick.delegate = self 

    img_pick.allowsEditing = true 

    img_pick.sourceType = UIImagePickerControllerSourceType.photoLibrary 

    self.present(img_pick, animated: true) 

} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 

{ 

    if let img_delegate = info[UIImagePickerControllerOriginalImage] as? UIImage 

    { 

     std_image.image = img_delegate 

    } 

    else 

    { 

     print("Error") 

    } 

    self.dismiss(animated: true, completion: nil) 

} 



@IBAction func register_action(_ sender: Any) 

{ 

    let app = UIApplication.shared.delegate as! AppDelegate 



    let context_view = app.persistentContainer.viewContext 



    if data_result != nil 

    { 

     data_result.setValue(std_name.text, forKey: "stdName") 

     data_result.setValue(std_roll.text, forKey: "stdRoll") 

     data_result.setValue(std_dept.text, forKey: "stdDept") 

     data_result.setValue(std_grade.text, forKey: "stdGrade") 

     let img_data = UIImageJPEGRepresentation(std_image.image!, 1.0)! 

     data_result.setValue(img_data, forKey: "stdImage") 

    } 

    else 

    { 



    let student = NSEntityDescription.insertNewObject(forEntityName: "Student_detail", into: context_view) as NSManagedObject 



    student.setValue(std_name.text, forKey: "stdName") 

    student.setValue(std_roll.text, forKey: "stdRoll") 

    student.setValue(std_dept.text, forKey: "stdDept") 

    student.setValue(std_grade.text, forKey: "stdGrade") 

    let img_data = UIImageJPEGRepresentation(std_image.image!, 1.0)! 

    student.setValue(img_data, forKey: "stdImage") 

    do 

    { 

     try context_view.save() 

     print("name is-->",std_name.text!,"roll no is-->",std_roll.text!,"dept is -->",std_dept.text!) 

    } 

    catch let error as NSError 

    { 

     print(error.localizedDescription) 

    } 

} 

    self.navigationController?.popViewController(animated: true) 



} 

}

+0

これは疑問に答えるかもしれませんが、答えの本質的な部分とOPコードの問題点について説明する方がよいでしょう。また、:あなたの投稿の書式設定に注意を払う** – pirho

関連する問題