2015-06-13 3 views
1

Почему нельзя использовать NSCFNumber (Core Data) для NSArray?Невозможно присвоить значение типа '__NSCFNumber'() в 'NSArray' swift

Ошибка:

Could not cast value of type '__NSCFNumber' (XXXXXXXX) to 'NSArray' (XXXXXXXX).

Код:

//Fetch Settings 
    func fetchAccounSetting(){ 
     let entityDescription = NSEntityDescription.entityForName("UserSettings", inManagedObjectContext: Context!) 
     let request = NSFetchRequest() 
     //let data = UserSettings(entity: entityDescription!, insertIntoManagedObjectContext: Context) 
     request.entity = entityDescription 

     var dataObjects: [AnyObject]? 

     do { 
      dataObjects = try Context?.executeFetchRequest(request) 
     } catch let error as NSError { 
      print(error) 
      dataObjects = nil 
     } 

     for result in dataObjects as! [NSManagedObject] { 
      let dataSelected = NSArray(array: result.valueForKey("favCategory")! as! NSArray) 
      print(dataSelected) 
     } 

UPDATE: Как я могу получить граф dataSelected?

+0

Вы не можете отличить число к массиву, потому что это не тот же тип объекта. –

+1

По той же причине я не могу превратить свой автомобиль в слона. Это не одно и сказать, что это не так. Значение для favCategory - это NSNumber, а не массив, поэтому ваш принудительный downcast не работает – Paulw11

+0

Эй, не будет ли ваша ошибка цикла, если 'dataObjects' был равен нулю? (если возникла ошибка и вы выбрали запрос на выборку) –

ответ

1

основных данных не может хранить массивы или словари первое место. Я помню, как раньше сталкивался с этой проблемой, когда учился.

AKA, ваш массив dataObjects не имеет ничего, что можно было бы ввести в NSArray. Способ сделать это состоит в моделировании отношения to-many (которое создает Set), которое может имитировать массив.

0

result.valueForKey("favCategory")! возвращает номер, но похоже, что вы ожидаете массив.

Возможно, вы имели в виду:

let dataSelected = [result.valueForKey("favCategory")!] 

Если вы знаете тип вы получаете обратно вы можете по желанию брось:

let dataSelected = [result.valueForKey("favCategory")!] 

if let dataSelected = dataSelected as? [NSNumber] { 
    // dataSelected is of type [NSNumber] a.k.a. Array<NSNumber> 
    print(dataSelected) 
} 
+0

Как я могу получить граф 'dataSelected'? – Xrait

+0

Когда я пытаюсь 'dataSelected.count', он дает мне последнее число выбора, а не общее количество. – Xrait

+0

Нет, это не так, оно дает вам количество элементов в массиве. –

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