2016-05-21 4 views
0

У меня возникли проблемы с тем, чтобы сделать в Swift то, что было в Objective C довольно просто. То есть для сортировки plist в алфавитном порядке на поле «title» перед заполнением ячеек.Сортировка массива plist для TableView в Swift

Весь процесс «сортировки» выглядит так, как будто это должно быть проще в Swift, но я просто не получаю его. Я тратил SO, но не получал решения. Любая помощь очень ценится. (Я не помещаю весь код здесь, как это было бы лишним).

override func viewDidLoad() { 
     super.viewDidLoad() 
     let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString 
     let sourcePath = documentsPath.stringByAppendingPathComponent("MyAnnotationsUSA.plist") 

     if let myMuseums = NSArray(contentsOfFile: sourcePath as String){ 
       for item in myMuseums { 
        titleData.append(item.objectForKey("title") as! String) 
        subTitleData.append(item.objectForKey("subtitle") as! String) 
        stateData.append(item.objectForKey("state") as! String) 

etc.etc...... 
+0

Спасибо, PravinS. Вы сделали редактирование кода, прежде чем я вернусь к нему :-) – PhilipS

+0

Как вы хотите отсортировать? Я имею в виду, на основе какого параметра вы хотите сортировать? – Amit89

+0

Я хочу сортировать массив по ключевому коду «title». Это то, что я сделал в Objective C, и я хочу сделать то же самое в Swift: // сортировать по алфавиту по названию NSSortDescriptor * дескриптор = [[NSSortDescriptor alloc] initWithKey: @ "title" по возрастанию: YES]; _ sortedTitle = [_content sortedArrayUsingDescriptors : @ [дескриптор]]; } return _sortedTitle; } – PhilipS

ответ

0

Похоже, что вы слишком рано разбираете данные. Как насчет:

var data: [(String, String, String)] = [] 
if let myMuseums = NSArray(contentsOfFile: sourcePath as String){ 
    for item in myMuseums { 
     data.append((item.objectForKey("title") as! String, item.objectForKey("subtitle") as! String, item.objectForKey("state") as! String)) 
    } 
} 
data.sortInPlace({$0.0 < $1.0}) 
titleData = data.map({$0.0}) 
subTitle = data.map({$0.1}) 
stateData = data.map({$0.2}) 

... и смотреть эти принудительные разворот ...!

+0

Спасибо, но не то, что я искал. В Obj C я просто отсортировал весь массив по одному ключу, а именно заголовку. – PhilipS

+0

Пожалуйста, покажите код Obj-C ... – Grimxn

+0

'- (NSArray *) содержание { если (_content!) { содержание = [[NSArray Alloc] initWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @ "MyAnnotationsUSA" OfType : @ "PLIST"]]; NSSortDescriptor * дескриптор = [[NSSortDescriptor alloc] initWithKey: @ "title" по возрастанию: YES]; _sortedTitle = [_content sortedArrayUsingDescriptors: @ [descriptor]]; } return _sortedTitle; } ' – PhilipS

0

Помог ли вам здесь, на SO и разрешил проблему. Я загружаю pList с сервера, и поэтому он не сохраняется в mainBundle. Это было решением (извините пустое пространство, которое я использовал для разделения различных элементов):

let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString 
    let sourcePath = documentsPath.stringByAppendingPathComponent("MyAnnotationsUSA.plist") 

    if let content = NSArray(contentsOfFile: sourcePath as String){ 


    let descriptor = NSSortDescriptor(key: "title", ascending: true) 
    let myMuseum = content.sortedArrayUsingDescriptors([descriptor]) 

     for item in myMuseum{ 
       titleData.append(item.objectForKey("title") as! String) 
       subTitleData.append(item.objectForKey("subtitle") as! String)