Swift-从岩心数据中检索图像

Swift-从岩心数据中检索图像,swift,core-data,ios8,xcode7,Swift,Core Data,Ios8,Xcode7,我已经在互联网上(大部分在这里)搜索过我的问题,我也尝试过,但我仍然无法让它起作用。我试图从核心数据中检索图像,然后将其显示在表视图中。所以基本上,一个带有缩略图、名称和开关的表视图。我有以下swift文件。谁能教我怎么做?除了图像检索之外,我还计划添加一个开关,当打开/关闭它时,它会要求输入密码,以便可以打开/关闭它。我怎么开始呢?希望得到你的善意回应。谢谢大家! 我有一段代码,用于将包含图像的记录保存到核心数据 let mOC = (UIApplication.sharedApplicati

我已经在互联网上(大部分在这里)搜索过我的问题,我也尝试过,但我仍然无法让它起作用。我试图从核心数据中检索图像,然后将其显示在表视图中。所以基本上,一个带有缩略图、名称和开关的表视图。我有以下swift文件。谁能教我怎么做?除了图像检索之外,我还计划添加一个开关,当打开/关闭它时,它会要求输入密码,以便可以打开/关闭它。我怎么开始呢?希望得到你的善意回应。谢谢大家!

我有一段代码,用于将包含图像的记录保存到核心数据

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

@IBOutlet weak var firstName: UITextField!
@IBOutlet weak var lastName: UITextField!
@IBOutlet weak var status: UILabel!

@IBAction func saveRecord(sender: AnyObject) {
    let entityDescription =
    NSEntityDescription.entityForName("Faculty",
        inManagedObjectContext: mOC)

    let faculty = Faculty(entity: entityDescription!,
        insertIntoManagedObjectContext: mOC)

    faculty.firstname = firstName.text
    faculty.lastname = lastName.text

    let pickedImage = UIImageJPEGRepresentation(imageView.image!, 1.0)

    faculty.image = pickedImage

    do {
        try mOC.save()
        firstName.text = ""
        lastName.text = ""

        status.text = "New record saved."
        NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)
        self.dismissViewControllerAnimated(true, completion: nil)
    } catch {
        status.text = "Record not saved."
    }

}

@IBOutlet weak var imageView: UIImageView!
var newMedia : Bool?
@IBAction func choosePhoto(sender: AnyObject) {
    if UIImagePickerController.isSourceTypeAvailable(
        UIImagePickerControllerSourceType.SavedPhotosAlbum) {
            let imagePicker = UIImagePickerController()

            imagePicker.delegate = self
            imagePicker.sourceType =
                UIImagePickerControllerSourceType.PhotoLibrary
            imagePicker.mediaTypes = [kUTTypeImage as String]
            imagePicker.allowsEditing = false
            self.presentViewController(imagePicker, animated: true,
                completion: nil)
            newMedia = false

    }

}
这是TableViewController,它在表视图上显示记录,应该是图像,我正试图找出的图像

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

var fetchedLastName = [String]()
var fetchedFirstName = [String]()

override func viewDidLoad() {
    super.viewDidLoad()

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadData:",name:"load", object: nil)

    let entityDescription =
    NSEntityDescription.entityForName("Faculty",
        inManagedObjectContext: managedObjectContext)

    let request = NSFetchRequest()
    request.entity = entityDescription

    do{
        let objects = try managedObjectContext.executeFetchRequest(request)

        let results = objects

        if results.count > 0 {
            for var i = 0; i < results.count; i += 1{
                let match = results[i] as! NSManagedObject

                fetchedLastName.append((match.valueForKey("lastname") as? String)!)
                fetchedFirstName.append((match.valueForKey("firstname") as? String)!)

            }
        } else {

        }
    }
    catch{}
}

func reloadData(notification: NSNotification){
    fetchedLastName.removeAll()
    fetchedFirstName.removeAll()

    let entityDescription =
    NSEntityDescription.entityForName("Faculty",
        inManagedObjectContext: managedObjectContext)

    let request = NSFetchRequest()
    request.entity = entityDescription

    do{
        let objects = try managedObjectContext.executeFetchRequest(request)

        let results = objects

        if results.count > 0 {
            for var i = 0; i < results.count; i += 1{
                let match = results[i] as! NSManagedObject

                fetchedLastName.append((match.valueForKey("lastname") as? String)!)
                fetchedFirstName.append((match.valueForKey("firstname") as? String)!)
            }
        } else {

        }
    }
    catch{}

    self.tableView.reloadData()
}

不太清楚Faculty()包含什么内容,但是,您需要将图像作为NSData保存到CoreData,然后当您想要从CoreData获取图像时,您可以获取NSData并将其转换为图像,如下所示:

let image = UIImage(named: "BackgroundSky")
//Change named: "" to your image
let imageAsNSData = UIImageJPEGRepresentation(image!, 1.0)
然后将其作为NSData保存到CoreData,然后当您从CoreData获取该数据时,这就是如何将其转换为图像:

let image = UIImage(data: imageAsNSData!)
//Change data: to the NSData

这就是从UIImage到NSData来回更改图像的方式。

不太确定Faculty()包含什么,但是,您需要将图像作为NSData保存到CoreData,然后当您想要从CoreData获取图像时,您可以获取NSData并将其转换为如下图像:

let image = UIImage(named: "BackgroundSky")
//Change named: "" to your image
let imageAsNSData = UIImageJPEGRepresentation(image!, 1.0)
然后将其作为NSData保存到CoreData,然后当您从CoreData获取该数据时,这就是如何将其转换为图像:

let image = UIImage(data: imageAsNSData!)
//Change data: to the NSData
这就是从UIImage到NSData来回更改图像的方式。

这样做可以解决:

var fetchedImage = [NSData]()

fetchedImage.append((match.valueForKey("image") as? NSData)!)

通过这样做解决:

var fetchedImage = [NSData]()

fetchedImage.append((match.valueForKey("image") as? NSData)!)


好的,这是固定代码:

TeachTableViewController:

//
//  TEACHTableViewController.swift
//  TEACH
//
//  Created by ICST340.N1 on 9/29/15.
//  Copyright © 2015 IyoTugs. All rights reserved.
//

import UIKit
import CoreData

class TEACHTableViewController: UITableViewController {
let managedObjectContext =
(UIApplication.sharedApplication().delegate
    as! AppDelegate).managedObjectContext

var fetchedLastName = [String]()
var fetchedFirstName = [String]()
var fetchedImage = [UIImage]()

override func viewDidLoad() {
    super.viewDidLoad()

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadData:",name:"load", object: nil)

    let entityDescription =
    NSEntityDescription.entityForName("Faculty",
        inManagedObjectContext: managedObjectContext)

    let request = NSFetchRequest()
    request.entity = entityDescription

    do{
        let objects = try managedObjectContext.executeFetchRequest(request)

        let results = objects

        if results.count > 0 {
            for var i = 0; i < results.count; i += 1{
                let match = results[i] as! NSManagedObject

                fetchedLastName.append((match.valueForKey("lastname") as? String)!)
                fetchedFirstName.append((match.valueForKey("firstname") as? String)!)
                //added this is convert the image
                let image = match.valueForKey("image") as! NSData
                fetchedImage.append(UIImage(data: image)!)

            }
        } else {

        }
    }
    catch{}
    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false

    // Uncommented this
    // Uncomment the following line to display an Edit button in the          navigation bar for this view controller.
    //        self.navigationItem.rightBarButtonItem = self.editButtonItem()
}

func reloadData(notification: NSNotification){
    fetchedLastName.removeAll()
    fetchedFirstName.removeAll()
    //Added this to remove all images
    fetchedImage.removeAll()

    let entityDescription =
    NSEntityDescription.entityForName("Faculty",
        inManagedObjectContext: managedObjectContext)

    let request = NSFetchRequest()
    request.entity = entityDescription

    do{
        let objects = try managedObjectContext.executeFetchRequest(request)

        let results = objects

        if results.count > 0 {
            for var i = 0; i < results.count; i += 1{
                let match = results[i] as! NSManagedObject

                fetchedLastName.append((match.valueForKey("lastname") as? String)!)
                fetchedFirstName.append((match.valueForKey("firstname") as? String)!)
                //added this is convert the image
                let image = match.valueForKey("image") as! NSData
                fetchedImage.append(UIImage(data: image)!)

            }
        } else {

        }
    }
    catch{}

    self.tableView.reloadData()
}


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

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return fetchedLastName.count
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("TEACH", forIndexPath: indexPath) as! TEACHTableViewCell

    let row = indexPath.row

    print(fetchedFirstName)

    cell.facultyName.text = fetchedLastName[row] + ", " + fetchedFirstName[row]
    cell.facultyImage.image = fetchedImage[row]

    return cell
}

}
//
//TEACHTableViewController.swift
//教书
//
//由ICST340.N1于2015年9月29日创建。
//版权所有©2015 IyoTugs。版权所有。
//
导入UIKit
导入CoreData
类TEACHTableViewController:UITableViewController{
让managedObjectContext=
(UIApplication.sharedApplication().delegate)
as!AppDelegate).managedObjectContext
var fetchedLastName=[String]()
var fetchedFirstName=[String]()
var fetchedImage=[UIImage]()
重写func viewDidLoad(){
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self,选择器:“重新加载数据:”,名称:“加载”,对象:nil)
让实体描述=
NSEntityDescription.entityForName(“教员”,
inManagedObjectContext:managedObjectContext)
let request=NSFetchRequest()
request.entity=entityDescription
做{
let objects=尝试managedObjectContext.executeFetchRequest(请求)
让结果=对象
如果results.count>0{
对于变量i=0;i0{
对于变量i=0;iInt{
//#警告未完成执行,返回节数
返回1
}
重写func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
//#警告未完成实现,返回行数
返回fetchedLastName.count
}
重写func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableView单元格{
让cell=tableView.dequeueReusableCellWithIdentifier(“TEACH”,forIndexPath:indexPath)作为!TEACHTableViewCell
让row=indexPath.row
打印(fetchedFirstName)
cell.facultyName.text=fetchedLastName[行]+,“+fetchedFirstName[行]
cell.facultyImage.image=fetchedImage[行]
返回单元
}
}
我标记了我修复的每个点,但只有四个点。其中两个涉及到获取NSData并将其转换为图像(在viewDidLoad和reloadData中,相同的点)。其中一个添加了注释,使右侧导航栏按钮成为编辑按钮。和