2015-04-23 2 views
1

я хочу, чтобы отсортировать массив объекта ниже моя функция для сортировки массива объекта[valueForUndefinedKey:]: этот класс не является ключевым значением, совместимым с кодировкой для ключевого назначения. - быстрое

class func Fn_SortByParameter(arrayToSort:NSMutableArray,paramName:NSString!, isAscending:Bool!){ 
    var sortDescriptor:NSSortDescriptor = NSSortDescriptor(key: paramName, ascending: isAscending, selector: Selector("localizedCompare:")) 
    var sortDescriptors:NSArray = NSArray(object: sortDescriptor) 
    var sortedArray:NSArray = arrayToSort.sortedArrayUsingDescriptors(sortDescriptors) 
    arrayToSort.removeAllObjects() 
    arrayToSort.addObjectsFromArray(sortedArray) 
} 

И

class func Fn_SortByParameter(arrayToSort:NSMutableArray,paramName:NSString!, isAscending:Bool!){ 
    var sortDescriptor:NSSortDescriptor = NSSortDescriptor(key: paramName, ascending: isAscending) 
    var sortDescriptors:NSArray = NSArray(object: sortDescriptor) 
    var sortedArray:NSArray = arrayToSort.sortedArrayUsingDescriptors(sortDescriptors) 
    arrayToSort.removeAllObjects() 
    arrayToSort.addObjectsFromArray(sortedArray) 
} 

массив содержит объекты ниже класса

class Appointment: NSObject { 

    var id:Double! 
     var status:NSString! 
     var clinic:Clinic! 
     var medicalCase:MedicalCase! 
     var patient:Patient! 
     var appointmentDate:Double! // Unix timestamp 
     var reasonForVisit:NSString! 
     var cancellationReason:NSString! 
     var visit:Visit! 
    } 

Когда я пытаюсь сортировать, он сбой с ошибкой ниже

[valueForUndefinedKey:]: этот класс не является ключевым значением, совместимым с кодировкой для ключевого задания.

Вызов функции для сортировки

Fn_SortByParameter(allAppointments.aaData, paramName: "appointmentDate", isAscending: true) 

ответ

13

Проблема вы бежите в том, что дополнительные типы значений, как Double! не подвергаются Objective-C выполнения и не доступны для кодирования ключ-значение.

Вы можете сделать это необязательным: var appointmentDate:Double, использовать объект NSNumber: var appointmentDate:NSNumber! или использовать массив Swift и встроенную функцию sorted.

0

Такие необъяснимые исключения часто являются результатом нечистого xib или файла раскадровки. Откройте xib или Storyboard в xcode, выберите «Владелец файла» и нажмите «Инспектор подключения» (стрелка вправо вверх), чтобы сразу увидеть все розетки. Ищите! S, который указывает на недостающую розетку.

подробно

1) Перейти к классу XIb файла или если его в раскадровку

2) Щелкните правой кнопкой мыши на UITableView, удалите все ранее привязок

3) Добавить новую привязку, предоставляя IBOutlet, делегата и источника данных.

4) Очистите проект и снова запустите.