为什么我不能在自定义类上设置变量?

时间:2016-06-25 04:18:08

标签: ios xcode swift

我正在Swift中创建我的第一个iOS应用程序,而且我只是坚持一个基本的东西。我想创建一个自定义类并设置一个变量。我一直看到错误“类型[项目]的值没有成员[名称]。

这是我的自定义类:

import UIKit
import Foundation
import CoreData

class Item:NSManagedObject {

    var name:String?

    convenience init(name: String?, insertIntoManagedObjectContext context: NSManagedObjectContext!) {
        let entity = NSEntityDescription.entityForName("ItemEntity", inManagedObjectContext: context)!
        self.init(entity: entity, insertIntoManagedObjectContext: context)
    }
}

这是我尝试使用它的代码:

func editItem(id:Int, category:String, brand:String, name:String, colour:String, purchasePrice:String, purchaseDate:String, expiryDate:String) -> Int {

    // vars
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext
    let entity = NSEntityDescription.entityForName("ItemEntity", inManagedObjectContext: managedContext)
    let item = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)
    var listItem = [Item]()
    let fetchRequest = NSFetchRequest(entityName: "ItemEntity")

    // fetch the item from the core data with the same ID
    do{
        let predicate = NSPredicate(format: "id == %@", String(id))
        fetchRequest.predicate = predicate
        fetchRequest.fetchLimit = 1
        let results = try managedContext.executeFetchRequest(fetchRequest)
        listItem = results as! [Item]
    }
    catch {
        let fetchError = error as NSError
        print (fetchError)
    }

    // edit the item
    listItem.name = "text"  // !! THIS IS THE LINE WHICH DISPLAYS THE ERROR

    // save the item
        do {
            try managedContext.save()
        }
        catch {
            let saveError = error as NSError
            print (saveError)
        }

}

真的很感谢你的帮助,这个看起来很基本,但很多谷歌搜索并没有帮助我解决这个问题。

3 个答案:

答案 0 :(得分:0)

在冒号周围放置空格。语法如果我没有弄错的话。

答案 1 :(得分:0)

listItem 是一个 Item 的数组,所以如果你想在这个列表中更改一个东西的名字,你应该指定你想要改变的索引,比如

listItem[0].name = "text"

答案 2 :(得分:0)

我认为问题代码在这里:

let item = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext) as! Item

默认情况下,项目类型为NSManagedObject,因此listItem没有成员[name]。您需要将其转换为Item Object。