コンタクト識別子をコンタクトテーブルビューコントローラから別のロケーションテーブルビューコントローラに渡します。そこで、私は代理人のContactSelectionDelegateを定義し、Location tableview controllerのメソッドuserSelectedContactを実装し、contactIdentifierStringを取得します。コアデータにfetchRequestで述語を使用する方法
私はデータベースを検索してcontactIdentifierStringの一致を見つけ、別の属性プロバイダ名の値を見つけます。これは、データベース全体の検索を伴います。コンテキストfetchRequestに述語を割り当てることでより速い方法がありますか?私はそれがより速く、より少ないコード行であると思った。
誰かが連絡先fetchRequestで述部を使用する方法を提案できますか?
ContactTableViewControllerコード:
protocol ContactSelectionDelegate{
func userSelectedContact(contactIdentifier:NSString)
}
class ContactTableViewController: UITableViewController {
var delegate:ContactSelectionDelegate? = nil
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if (delegate != nil){
let contactDict:NSDictionary = allContacts.object(at: indexPath.row) as! NSDictionary
let identifier = contactDict.object(forKey: "uniqueId")
delegate!.userSelectedContact(contactIdentifier: identifier as! NSString)
self.navigationController!.popViewController(animated: true)
}
}
}
LocationTableViewControllerコード:
class LocationTableViewController: UITableViewController, ContactSelectionDelegate, CLLocationManagerDelegate {
var contactIdentifierString:NSString = NSString()
func userSelectedContact(contactIdentifier: NSString) {
var fetchedResults: [Contact] = []
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
do {
fetchedResults = try context.fetch(Contact.fetchRequest())
}
catch {
print ("fetch task failed")
}
if fetchedResults.count > 0 {
for contact in fetchedResults{
let aContact:Contact = contact
if (aContact.uniqueId! == contactIdentifierString as String) {
providerName.text = aContact.providerName
}
else {
continue
}
}
}
}
含む
NSManagedObject
サブクラスContact
があることを前提としてい: "Ambiguoiusのfetchrequestの使用"。 fetchRequest = Contact.fetchRequest()を – vraoに変更します。let req:NSFetchRequest = Contact.fetchRequest()。今私はエラーが発生します:宣言されていない型NSFetchRequestの使用。私はNSManagedObjectサブクラスを持っていないように見えます。したがって、生成されたNSManagedObjectは、両方のエンティティのサブクラスです。 Contact + CoreDataProperties.swift内の連絡先エンティティで「連絡先がこのコンテキストでタイプルックアップにあいまいです」というエラーが表示されます。 NSManagedObjectクラスが自動生成されている可能性があります。エラーで円を描くあなたpl。説明し、修正する方法? –
vrao
'providerName'がドット表記でアクセスされるので、NSManagedObjectサブクラスを使用していると仮定していました。サブクラスには 'fetchRequest()'メソッドが含まれていなければなりません。私は答えを更新しました。 – vadian