2016-01-09 89 views
0

所以我有這個xCode項目我正在努力製作一個Swift語言的iPhone應用程序。我試圖在一個對象中存儲兩個字符串,一個二進制數據圖像,我可以在這個viewcontroller中檢索到核心數據。我用來轉換到這個視圖的表格視圖顯示了正確的項目關聯,但是當我加載這個視圖時,這些屬性沒有加載。爲什麼對象沒有被上傳並顯示到viewcontroller爲什麼我的CoreData對象不能被My View Controller檢索

import UIKit 
import CoreData 

class IndividualMainViewController: UIViewController, NSFetchedResultsControllerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate 
{ 

    @IBOutlet weak var backCancelButton: UIBarButtonItem! 
    @IBOutlet weak var saveEditButton: UIBarButtonItem! 

    @IBOutlet weak var deviceImageButton: UIButton! 
    @IBOutlet weak var cameraImageButton: UIButton! 


    var item: Item? = nil 
    let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 
    let frc: NSFetchedResultsController = NSFetchedResultsController() 


    @IBOutlet weak var imageHolder: UIImageView! 

    @IBOutlet weak var horseName: UITextField! 
    @IBOutlet weak var officialName: UITextField! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 


     if(item == nil) 
     { 
      print("item returned nil") 
      print(item) 
     } 
     else 
     { 
      print("Object did load") 
      self.horseName.text = item?.name 
      self.officialName.text = item?.offName 
      self.imageHolder.image = UIImage(data: (item?.image)!) 

      saveEditButton.title = "Edit" 
      backCancelButton.title = "To Barn" 

      self.deviceImageButton.hidden = true 

      self.cameraImageButton.hidden = true 

     } 

     let tap: UIGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissEditor") 
     view.addGestureRecognizer(tap) 


    } 

    override func didReceiveMemoryWarning() 
    { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func dismissEditor() 
    { 
     view.endEditing(true) 
    } 



    @IBAction func addImageFromDevice(sender: AnyObject) 
    { 
     let pickerController = UIImagePickerController() 
     pickerController.delegate = self 
     pickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 
     pickerController.allowsEditing = true 

     self.presentViewController(pickerController, animated: true, completion: nil) 
    } 


    @IBAction func addImageFromCamera(sender: AnyObject) 
    { 
     let pickerController = UIImagePickerController() 
     pickerController.delegate = self 
     pickerController.sourceType = UIImagePickerControllerSourceType.Camera 
     pickerController.allowsEditing = true 

     self.presentViewController(pickerController, animated: true, completion: nil) 
    } 

    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) 
    { 
     self.dismissViewControllerAnimated(true, completion: nil) 

     self.imageHolder.image = image 
    } 



    @IBAction func saveEditTapped(sender: AnyObject) 
    { 
     if(saveEditButton.title == "Save") 
     { 
      if item != nil 
      { 
       editItem() 

       print("Item edit saved") 

       saveEditButton.title = "Edit" 
       backCancelButton.title = "To Barn" 
      } 
      else 
      { 
       createNewItem() 

       print("New item created") 

       performSegueWithIdentifier("back", sender: nil) 
      } 
     } 
     else 
     { 
      saveEditButton.title = "Save" 
      backCancelButton.title = "Cancel" 
      print("Not saved") 
     } 
    } 



    func createNewItem() 
    { 
     let entityDescription = NSEntityDescription.entityForName("Item", inManagedObjectContext: moc) 

     let item = Item(entity: entityDescription!, insertIntoManagedObjectContext: moc) 

     item.name = horseName.text 
     item.offName = officialName.text 
     item.image = UIImagePNGRepresentation(imageHolder.image!) 

     do 
     { 
      try self.moc.save() 
     } 
     catch 
     { 
      print("Failed ot create new object") 
      return 
     } 
    } 



    func editItem() 
    { 
     item?.name = horseName.text 
     item?.offName = officialName.text 
     item!.image = UIImagePNGRepresentation(imageHolder.image!) 

     do 
     { 
      try self.moc.save() 
     } 
     catch 
     { 
      print("Failed to save item") 
      return 
     } 
    } 
} 

回答

0

僅僅使用泛型初始值設定項來初始化NSFetchedResultsController是不夠的。

您必須告訴控制器該做什麼,要使用哪個管理對象上下文來設置委託並執行初始提取。

Swift中的常用方法是將控制器聲明爲惰性計算變量。

lazy var fetchedResultsController: NSFetchedResultsController = { 

    let fetchRequest = NSFetchRequest() 
    let entity = NSEntityDescription.entityForName(self.entity, inManagedObjectContext: self.managedObjectContext) 
    fetchRequest.entity = entity 
    fetchRequest.predicate = self.fetchPredicate 

    // Set the batch size to a suitable number. 
    fetchRequest.fetchBatchSize = 20 

    // Edit the sort key as appropriate. 
    fetchRequest.sortDescriptors = [self.sortDescriptor] 

    // Edit the section name key path and cache name if appropriate. 
    // nil for section name key path means "no sections". 
    let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: nil, cacheName: nil) 
    aFetchedResultsController.delegate = self 

    do { 
    try aFetchedResultsController.performFetch() 
    } catch let error as NSError { 
    print(error) 
    } 

    return aFetchedResultsController 
}() 

與你的價值觀通過替換實例變量(從self.)表示所有參數

相關問題