Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data Swift中的核心数据_Core Data_Nsarray_Swift_Nsmanagedobjectcontext_Ios8 - Fatal编程技术网

Core data Swift中的核心数据

Core data Swift中的核心数据,core-data,nsarray,swift,nsmanagedobjectcontext,ios8,Core Data,Nsarray,Swift,Nsmanagedobjectcontext,Ios8,尝试使用Swift中的核心数据。我发现了一个例子: 创建了实体“Person”,包含两个字符串字段—lastname和firstname。创建UITableViewController(MainTableViewController)以在屏幕上显示记录。创建UIViewController(DetailViewController)以添加新记录。为实体数据创建了我自己的类(AddrBook) 无法显示主类-MainTableViewController中实体中包含的记录。 我的班级AddrBo

尝试使用Swift中的核心数据。我发现了一个例子:

创建了实体“Person”,包含两个字符串字段—lastnamefirstname。创建UITableViewController(MainTableViewController)以在屏幕上显示记录。创建UIViewController(DetailViewController)以添加新记录。为实体数据创建了我自己的类(AddrBook)

无法显示主类-MainTableViewController中实体中包含的记录。

我的班级AddrBook.swift

import UIKit
import CoreData

@objc(AddrBook)
class AddrBook: NSManagedObject {

@NSManaged var lastname:String
@NSManaged var firstname:String
}
import UIKit
import CoreData

class DetailViewController: UIViewController {

@IBOutlet var lastNameField : UITextField = nil
@IBOutlet var firstNameField : UITextField = nil

init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}

init(coder aDecoder: NSCoder!) {
    super.init(coder: aDecoder)
}

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

@IBAction func saveButtonPressed(sender : AnyObject) {

    let appDelegate:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
    let context:NSManagedObjectContext = appDelegate.managedObjectContext
    let projectEntity = NSEntityDescription.entityForName("Person", inManagedObjectContext: context)
    var newPerson = AddrBook(entity: projectEntity, insertIntoManagedObjectContext: context)
    newPerson.lastname = lastNameField.text
    newPerson.firstname = firstNameField.text
    context.save(nil)
    self.dismissViewControllerAnimated(true, completion: nil)
}
}
UIViewController以添加新记录DetailViewController.swift

import UIKit
import CoreData

@objc(AddrBook)
class AddrBook: NSManagedObject {

@NSManaged var lastname:String
@NSManaged var firstname:String
}
import UIKit
import CoreData

class DetailViewController: UIViewController {

@IBOutlet var lastNameField : UITextField = nil
@IBOutlet var firstNameField : UITextField = nil

init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}

init(coder aDecoder: NSCoder!) {
    super.init(coder: aDecoder)
}

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

@IBAction func saveButtonPressed(sender : AnyObject) {

    let appDelegate:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
    let context:NSManagedObjectContext = appDelegate.managedObjectContext
    let projectEntity = NSEntityDescription.entityForName("Person", inManagedObjectContext: context)
    var newPerson = AddrBook(entity: projectEntity, insertIntoManagedObjectContext: context)
    newPerson.lastname = lastNameField.text
    newPerson.firstname = firstNameField.text
    context.save(nil)
    self.dismissViewControllerAnimated(true, completion: nil)
}
}
理论上讲,在这门课上一切顺利。必须添加条目

主类MainTableViewController.swift。以显示记录。正在尝试通过NSLog获取它们:

import UIKit
import CoreData

class MainTableViewController: UITableViewController {

init(style: UITableViewStyle) {
    super.init(style: style)
}

init(coder aDecoder: NSCoder!) {
    super.init(coder: aDecoder)
}

override func viewDidLoad() {
    super.viewDidLoad()

    let request = NSFetchRequest(entityName: "Person")
    request.returnsObjectsAsFaults = false
    let appDelegate:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
    let context:NSManagedObjectContext = appDelegate.managedObjectContext
    var results:NSArray = context.executeFetchRequest(request, error: nil)
    for currentPerson in results as AddrBook[] {
        NSLog("\(currentPerson.lastname)")
        NSLog("\(currentPerson.firstname)")
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
    return 1
}

override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
    return 0
}
}
显示表达式中存在错误

for currentPerson in results as AddrBook[] {
错误:

无法将表达式的类型“AddrBook[]”转换为类型“AddrBook[]”

我做错了什么


对于LombaX:

override func viewDidLoad() {
    super.viewDidLoad()

    let request = NSFetchRequest(entityName: "Person")
    request.returnsObjectsAsFaults = false
    let appDelegate:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
    let context:NSManagedObjectContext = appDelegate.managedObjectContext
    var results : AddrBook[]? = context.executeFetchRequest(request, error: nil) as? AddrBook[]
    NSLog("\(results)")
    if let array = results   // check for nil and unwrap
    {
        for currentPerson in array as AddrBook[] {
            NSLog("\(currentPerson.lastname)")
            NSLog("\(currentPerson.firstname)")
        }
    }

    // var results:NSArray = context.executeFetchRequest(request, error: nil)
    /*for currentPerson in results as AddrBook[] {
        NSLog("\(currentPerson.lastname)")
        NSLog("\(currentPerson.firstname)")
    }*/

}
输出NSLog-2014-06-24 21:25:41.243第12课-swift[1651:136375]nil

变量结果为零:-(


在Dropbox中链接到项目:

首先,检查您是否在数据模型中填充了类: As
ProjectName.AddrBook
(对于swift类,您甚至必须指定项目名称)。(注意:只有在类之前未使用前缀@objc(AddrBook)时才需要此项,但我看到您使用了它,所以这不是问题)

如右上角类部分中的此图像中的AddrBook

此外,改变你的演员阵容如下:

// since executeFetchRequest can return nil, cast it as an optional array of [AddrBook]
// note: the first [AddrBook]? Can be omitted
var results : [AddrBook]? = context.executeFetchRequest(request, error: nil) as? [AddrBook]  

if let array = results   // check for nil and unwrap
{
    for currentPerson in array as [AddrBook] {
        // print
    }
}
或者,不太明确,不检查零

var results = context.executeFetchRequest(request, error: nil)  

    for currentPerson in results as [AddrBook] {
        // print
    }

首先:删除for并在results=…之后放置断点。查看变量窗口:数组中是否正确填充了AddrBook对象?此外,您是否在模型文件中将类名设置为“ProjectName.AddrBook”?已尝试。结果屏幕截图:results=(\u PFArray*)@“1 object”[0]()变量窗口现在有点问题…如果打印LN(结果)会怎么样?请将详细信息添加到原始问题中,而不是作为新的答案。但是,如果结果为零,您应该检查错误。将NSError变量作为&error传递,并检查返回的错误С。您可以查看我的项目并帮助理解吗?请…链接到Dropbox:查看添加的图像,这是您的问题。如果没有,我会快速检查工作我回到电脑后会再次检查(1-2小时)是的!工作!我这样做了:这是结果:现在我将尝试继续使用核心数据。谢谢!我可以稍后问几个问题吗?:-)