2014-08-27 18 views
12

Tôi hiện đang viết một ứng dụng danh bạ điện thoại đơn giản trong Swift và cần sắp xếp kết quả từ truy vấn CoreData.Sắp xếp kết quả CoreData bằng NSPredicate trong Swift

Về cơ bản, tôi thiết lập NSManagedObject được gọi là "Thư mục", với tên trường thích hợp trong - ví dụ: "name_f" là tên của người dùng.

Tên trong cơ sở dữ liệu CoreData được truy vấn theo thứ tự bảng chữ cái. Tuy nhiên, mặc dù tìm kiếm đầu tiên trả lại kết quả theo thứ tự bảng chữ cái, các tìm kiếm khác đôi khi không phải sau khi cơ sở dữ liệu được truy vấn bởi các khu vực khác của chương trình. Tôi không chắc chắn tại sao điều này là, nhưng muốn đưa vào mã để chủ động sắp xếp các mảng được trả về bởi bất cứ lĩnh vực nào.

Mã của tôi mà trả về mảng NSManagedObject là như sau:

func SearchName(nameToSearch: String) -> NSArray { 
    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
    let context:NSManagedObjectContext = appDel.managedObjectContext! //I added the ! 

    let request = NSFetchRequest(entityName: "Directory") 
    request.returnsObjectsAsFaults = false  //will return the instance of the object 

    //request.predicate = NSPredicate(format: "name_f = %@", nameToSearch) 
    //request.predicate = NSPredicate(format: "name_f MATCHES '.*(\(nameToSearch)).*'") 
    request.predicate = NSPredicate(format: "name_f MATCHES[cd] '(\(nameToSearch)).*'") 
    var results:NSArray = context.executeFetchRequest(request, error: nil) 
    return results 
} 

Là một sang một bên, tôi đang sử dụng đoạn mã sau để kéo một giá trị cụ thể từ các kết quả trả về (nơi SearchResult là một thể hiện của lớp đó SearchName là in):

var particularEntry = self.searchResult[self.selectedItem] as Directory 
    lblDetailName.text = thisPerson.name_f 

Lý tưởng nhất, tôi muốn để có thể: 1 - Sửa đổi mã ở trên để đảm bảo rằng các mảng 'kết quả' được sắp xếp một cách thích hợp. 2 - Xác định mã mà sau đó có thể được áp dụng cho mảng kết quả để sắp xếp lại theo bất kỳ trường nào.

Cảm ơn trước!

+0

Bạn đã có một cái nhìn tại các 'tài sản của 'NSPredicate' sortDescriptors'? "Hướng dẫn lập trình dữ liệu cốt lõi" cũng có nhiều ví dụ (trong Mục tiêu-C), xem https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdFetching.html#//apple_ref/doc/uid/TP40002484-SW1. –

+0

sortDescriptors là tài sản của NSFetchRequest. Tôi không nghĩ rằng NSPredicate có tài sản như vậy. – Sandeep

+1

@ insane-36: Bạn nói đúng, ý tôi là NSFetchRequest. –

Trả lời

38

Cảm ơn - Những dòng này đã được yêu cầu trước khi dòng request.predicate:

let sortDescriptor = NSSortDescriptor(key: "name_f", ascending: true) 
let sortDescriptors = [sortDescriptor] 
request.sortDescriptors = sortDescriptors 
Các vấn đề liên quan