2016-07-31 2 views
0

я получаю следующее сообщение об ошибке:Swift: Невозможно преобразовать значение типа 'Int16' в ожидаемый тип аргумента 'AnyObject?'

Cannot convert value of type 'Int16' to expected argument type 'AnyObject?'

на линии

person.setValue(Time, forKey: "Time") 

, когда я запускаю это приложение. Кадр функции был взят из this tutorial и изменен с String на Int16, а также имена сущностей и атрибутов.

var people = [NSManagedObject]() 

    func saveName(Time: Int16) { 
    //1 
    let appDelegate = 
     UIApplication.sharedApplication().delegate as! AppDelegate 

    let managedContext = appDelegate.managedObjectContext 

    //2 
    let entity = NSEntityDescription.entityForName("Person", 
                inManagedObjectContext:managedContext) 

    let person = NSManagedObject(entity: entity!, 
           insertIntoManagedObjectContext: managedContext) 

    //3 
    person.setValue(Time, forKey: "Time") 

    //4 
    do { 
     try managedContext.save() 
     //5 
     people.append(person) 
    } catch let error as NSError { 
     print("Could not save \(error), \(error.userInfo)") 
    } 
} 
+0

Вместо вызова 'setValue', лучше определить управляемые подклассы объектов для субъектов, а затем доступ к их свойствам. Это гораздо менее подвержено ошибкам. –

ответ

3

Как говорится в ошибке, Int16 не является объектом в Swift и поэтому не может использоваться в setValue(forKey:), который ожидает объект. Попробуйте обернув его в NSNumber, например, так:

person.setValue(NSNumber(short: Time), forKey: "Time") 
+0

Это исправляет проблемы, спасибо! –

2

Если вы собираетесь использовать Int16, вы не можете передать, что от непосредственно Objective-C, как объект, как вы можете с мостиком типов номеров, таких как Int. Быстрые числа не являются объектами Objective-C, и Swift не поможет вам, кроме простых чисел, таких как Int и Double. Для Int16, вы должны обернуть его как NSNumber, самостоятельно.

+0

ах я вижу сейчас, им новый для программирования жаль. Спасибо за ответ –

Смежные вопросы

 Смежные вопросы