2015-01-15 48 views
-1

我有兩個實體與coredata關係:fetchRequest.predicate與Coredata運行正常使用Objective-C,但不是迅速

實體「Kategorien」有關係的「一對多」到被稱爲實體「細節」 「kategorie」

enter image description here

在controllerA與 「Kategorien」 我選擇 「Kategorien」,並達到控制器 「DetailViewController」 與 「細節」:

斯威夫特:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "MainDetail" { 
     let indexPath:NSIndexPath = self.tableView.indexPathForSelectedRow()! 
     let controller = segue.destinationViewController as DetailViewController 
     let kat:Kategorien = self.fetchedResultsController.objectAtIndexPath(indexPath) as Kategorien 

     controller.kategorie = kat  } 
} 

在DetailViewController我接收它:

class DetailViewController: UITableViewController, NSFetchedResultsControllerDelegate { 

    var kategoie:Kategorien! 

目標C吉是一個屬性在DetailViewController.h

@property (strong, nonatomic) Kategorien *kat; 

並在fetchResulController我只是說

#pragma mark - Fetched results controllers delegates 
- (NSFetchedResultsController *)fetchedResultsController { 
... 
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"kategorie == %@", kat]; 

並顯示了kategorie的記錄。

隨着在fetchResulController 斯威夫特我嘗試了與

fetchRequest.predicate = NSPredicate(format:"kategorie == %@", kategorie) 

等方式(即kategorie.description),但

沒有記錄將顯示

Whar我有沒有missunderstand ?我的錯誤在哪裏?它驅動我瘋狂 ...

+0

爲什麼它在Objective-C中創建Swift謂詞和'kat'時是'kategorie'? - (如果你提供一個*鏈接*到你的核心數據模型的屏幕截圖,那麼友好的用戶可能會將它添加到你的問題:) – 2015-01-15 18:52:54

+0

對不起:kategorie是在Swift和kat在Objective-C中。我都是一樣的。我如何提供鏈接? – 2015-01-15 19:22:46

+0

例如,您可以將圖像上傳到http://imgur.com並在此處張貼鏈接。 – 2015-01-15 19:25:15

回答

0

我得到它! :-) 接過雷Wenderlichs的解決方案「核心數據通過教程」來管理MOC:

import CoreData 
public class CoreDataStack { 
    let context:NSManagedObjectContext 
    let psc:NSPersistentStoreCoordinator 
    let model:NSManagedObjectModel 
    let store:NSPersistentStore? 
    ... 

此類由AppDelegate.swift(無MOC ...)調用,ViewControllers。但是這總會創造一個新的MOC!所以「Kategorien」和「Details」都有自己的MOC。 所以fetchRequest

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"kategorie == %@", kategorie] 

在細節有另一個MOC作爲kategorien從controllerA了。

現在我殺死了類CoreDataStack並移植到AppDelegate.swift請參閱Swift: cannot preload Coredata。現在所有使用相同的MOC,一切都很好...... :-)

2

該構造函數不能在swift中使用,因爲它使用可變參數。

相反,Objective C的構造函數:

+ (NSPredicate *)predicateWithFormat:(NSString *)format 

使用SWIFT構造:

init(format predicateFormat: String, 
    argumentArray arguments: [AnyObject]?) -> NSPredicate 

所以,你的代碼應該是這樣的:

fetchRequest.predicate = NSPredicate(format:"kategorie == %@", argumentArray:[kategorie]) 
+0

THX亞歷克斯,但我得到了errormessage「無關的參數標籤」參數「在通話中」,你可以幫助嗎??? – 2015-01-16 13:53:54

+0

嘗試新版本如果有疑問,請點擊Xcode中的符號NSPredicate看看實際的API。代碼完成也是你的朋友 – 2015-01-16 15:04:27

+0

是的,我這樣做了,但仍然沒有Child-Records(???)可能是,原因是,我使用了一個sqlite-文件從Objective-C版本遷移???? – 2015-01-16 18:02:37