2016-03-18 7 views
0

У меня есть рабочее приложение, которое сохраняет множество различных точек данных в Core Data. Каждый элемент, который сохраняется в поле типа String, сохраняет только find (я доказываю это, выбирая его потом и печатая на экран). Однако у меня возникают проблемы с целым полем (в частности, с типом данных Int16). Есть ли что-то неправильно в строке кода ниже, пытаясь сохранить «activityOrder»?Сохранение целого числа типа Int16 to Core Data - Swift

let newActivity = NSEntityDescription.insertNewObjectForEntityForName("Activities", inManagedObjectContext: context) as NSManagedObject 

    newActivity.setValue(selectedOwnerName, forKey: "activityOwner") 
    newActivity.setValue(selectedActivityType, forKey: "activityType") 
    newActivity.setValue(newNumber, forKey: "activityOrder") 

    //save the record 
    do { 
     try newActivity.managedObjectContext?.save() 
    } catch { 
     print(error) 
    } 

Я могу подтвердить, что переменная «newNumber» имеет значение и на самом деле 1. поля «activityOwner» и «activityType» сохраняются правильно (опять же, все поля типа String).

Вот код, я использую, чтобы проверить, есть ли что-нибудь там:

let orderFetchRequest: NSFetchRequest = NSFetchRequest(entityName: "Activities") 
    orderFetchRequest.returnsObjectsAsFaults = false 
    orderFetchRequest.fetchLimit = 1 

    do { 
     let orderResults = try appDelegate.managedObjectContext.executeFetchRequest(orderFetchRequest) 
     orderData = orderResults as! [NSManagedObject] 
    } catch let error as NSError { 
     print("Could not fetch \(error), \(error.userInfo)") 
    } 

    let orderSortDescriptor = NSSortDescriptor(key: "activityOrder", ascending: true) 
    orderFetchRequest.sortDescriptors = [orderSortDescriptor] 

    print(orderData) 

Эффективно напечатать наш «OrderData», который печатает всю запись (что, где я вижу значение для всех строкового данные но ноль для заказа)

Я довольно новичок в данных Core и Swift. Выполняют ли целые команды по сравнению с строками при сохранении в Core Data?

+0

как 'newNumber' объявлен в вашем управляемом объекте? –

+0

Я изначально объявлял его как var newNumber: Int, но я также пробовал «NSNumber» «Int16» и другие. – skind

+0

Можете ли вы включить код, который вы используете, для извлечения данных и отображения его? – Michael

ответ

0

Основные данные могут сохранять только тип объекта. Поэтому, если вы хотите использовать тип dave Int, сначала конвертируйте его в объект NSNumber, а затем сохраните в Core Data.

let newActivity = NSEntityDescription.insertNewObjectForEntityForName("Activities", inManagedObjectContext: context) as NSManagedObject 
newActivity.setValue(selectedOwnerName, forKey: "activityOwner") 
newActivity.setValue(selectedActivityType, forKey: "activityType") 
newActivity.setValue(NSNumber(short: newNumber), forKey: "activityOrder") 
+0

Таким образом, даже при добавлении преобразования NSNumber он все равно производит nil, когда я извлекаю результаты. – skind

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