2015-09-11 5 views
0

В последнее время я внедряю базовую структуру данных, и каждый шаг реализации имеет скрытую проблему. Вот и проблема: я не совсем уверен, как ее решить.
До сих пор я реализовал функции сохранения и извлечения для моего табличного представления.
Прежде всего выборки возвращались ошибки данных, поэтому я реализовалФункция выборки данных основных данных Swift

fetchRequest.returnsObjectsAsFaults = false 

теперь данные подавался и показан в Tableview, но это было огромное количество дублей и был в хаотичном порядке, поэтому я добавил

fetchRequest.returnsDistinctResults = true 

, но это не работает, поэтому после того, как я уже прибегая к помощи реализованы следующие один лайнер

fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType 

В качестве конечного результата функция выборки не запускается вообще. отладчик просто пропускает действие, и приложение возвращает пустой tableview.

Вот мой код. С нетерпением жду любых предложений:

func fetchItems() { 

    // get the managed object context 

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    let managedObjectContext = appDelegate.managedObjectContext! 

    // create fetch requests 

    let fetchRequest = NSFetchRequest(entityName:"Entities") 

    fetchRequest.returnsObjectsAsFaults = false 
    fetchRequest.returnsDistinctResults = true 
    fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType 
    var fetchedResults : [NSManagedObject]? 
    do { 
     fetchedResults = try managedObjectContext.executeFetchRequest(fetchRequest) as? [NSManagedObject] 
    } 
    catch { 
     print("Could not fetch \(error)") 
    } 

    if let results = fetchedResults { 
     someOtherArray = [results] 
    } 
} 

ответ

1

Я очень сильно сомневаюсь, что вы хотите, или нужны эти строки:

fetchRequest.returnsObjectsAsFaults = false 
fetchRequest.returnsDistinctResults = true 
fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType 

Первый в первую очередь оптимизация производительности. «Ошибки», как правило, не являются поводом для беспокойства - CoreData сохраняет память, не заполняя значения свойств для всех объектов, возвращаемых извлечения. Но он будет делать это автоматически для каждого объекта, как только вы попытаетесь получить доступ к каким-либо его свойствам. Так что эта строка прекрасна, но не нужна.

Что касается дубликатов данных, вы не должны использовать returnsDistinctResults для их подавления, вы должны избегать их создания.

Последняя строка является причиной вашего пустого вида таблицы. Поскольку вы указываете DictionaryResultType, массив, возвращаемый выборкой, представляет собой массив словарей. Но с этой линией:

fetchedResults = try managedObjectContext.executeFetchRequest(fetchRequest) as? [NSManagedObject] 

вы затем пытаетесь бросить этот массив как массив из NSManagedObjects. Это приводит к сбою, и, следовательно, FetchedResults равен нулю, и поэтому someOtherArray не установлен.

Что касается хаотического порядка, вы должны использовать дескриптор сортировки (см. Документацию NSSortDescriptor), чтобы отсортировать результаты по вашему желанию.

Наконец, как и в вашем другом вопросе, вы устанавливаете someOtherArray как [результаты], который представляет собой массив, содержащий массив results. Я подозреваю, что вы действительно хотите:

someOtherArray = results