2017-11-28 8 views
0

現在、私のコードは基本的に名前を収集するためにNSPredicateまたはソート記述子を使用しています。私は、NSPredicateがすべての名前をa-zからソートすることを望みます。sort coreData fetch(swift4)

COREDATAHANDLER

class coreDataHandler: NSObject { 

private class func getContext() -> NSManagedObjectContext{ 

    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    return appDelegate.persistentContainer.viewContext 
} 
class func saveObject(username:String, password:String) -> Bool{ 
let context = getContext() 
    let entity = NSEntityDescription.entity(forEntityName: "User", in: context) 
    let managedObject = NSManagedObject(entity: entity!, insertInto: context) 

    managedObject.setValue(username, forKey: "username") 
    managedObject.setValue(password, forKey: "password") 
    do { 
     try context.save() 
     return true 
    } catch { 
     return false} 



    } 
class func filterData() -> [User]? { 
    let conttext = getContext() 
    let fetchRequest:NSFetchRequest<User> = User.fetchRequest() 

    var user:[User]? = nil 

    var predicate = NSPredicate(format: "username contains[d] %@" ,"duke") 

    fetchRequest.predicate = predicate 
    do { 
     user = try conttext.fetch(fetchRequest) 
     return user 
    }catch { 
     return user 
    } 
} 

のViewController

user = coreDataHandler.filterData() 
    for i in user! { 
     print("Judou : \(i.username!)") 
    } 
+0

NSPredicatesは、データをフィルタリングするために使用されている - あなたは例えば、NSSortDescriptorsを使用する必要があり、結果をソートします。 'fetch.sortDescriptors = [NSSortDescriptor(key:" username "、ascending:true)]' – pbasdf

+0

@pbasdf NSObjectまたはviewControllerに入れますか? –

+0

フェッチ時にソート記述子を指定することができます(おそらく最適です)。または、フェッチによって返された配列をソートするためにソート記述子を使用できます。最初のコードをお勧めしますので、コードはCoreDataHandlerに入ります。 – pbasdf

答えて

0

あなたのuser配列がusername、その後passwordでソートしたい場合は、私がソートされた配列を得るためにあなたのCoreDataHandlerクラスにクラスの機能を追加します:

class func getSortedData() -> [User]? { 
    let conttext = getContext() 
    let fetchRequest:NSFetchRequest<User> = User.fetchRequest() 

    var user:[User]? = nil 

    var nameSort = NSSortDescriptor(key:"username", ascending:true)    
    var passwordSort = NSSortDescriptor(key:"password", ascending:false) 

    fetchRequest.sortDescriptors = [nameSort, passwordSort] 
    do { 
     user = try conttext.fetch(fetchRequest) 
     return user 
    } catch { 
     return user 
    } 
} 

は、その後、あなたのビューコントローラでは、ソートされた配列を取得するには、この新しい関数を使用します。

user = coreDataHandler.getSortedData() 
for i in user! { 
    print("Judou : \(i.username!), Password:\(i.password)") 
} 
+0

ユーザ名を昇順に並べ替えるにはどうすればよいですか?次にパスワードを降順でソートします。たとえば、username:ben、password:b、username:Ben、password a。 ben、a、benを印刷しようとしています。 –

+0

順序で使用される複数のソート記述子を指定できます。私は自分の答えを更新します。 – pbasdf