2016-06-05 20 views
2

Hier ist mein Code:NSFetchedResultsControllerDelegate Delegierten Methoden aufgerufen nicht

class FetchResultControllerDataProvider: NSObject, NSFetchedResultsControllerDelegate { 

    private let fetchedResultController: NSFetchedResultsController 
    private var delegate: TodayViewController! 

    init(fetchedResultController: NSFetchedResultsController, delegate: TodayViewController) { 
     self.fetchedResultController = fetchedResultController 
     self.delegate = delegate 

     super.init() 
     self.fetchedResultController.delegate = self 
     try! self.fetchedResultController.performFetch() 
    } 

    func controllerWillChangeContent(controller: NSFetchedResultsController) { 
     print("Controller will change") 
    } 

    func controllerDidChangeContent(controller: NSFetchedResultsController) { 
     print("COntroller did changed") 
    } 

    func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) { 
     print("Controller did change section") 
    } 

    func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) { 
     print("Controller did change object at indexpath") 
    } 
} 


func loadData() { 
    let request = NSFetchRequest(entityName: Transaction.entityName) 
    request.predicate = Transaction.defaultPredicate 
    request.sortDescriptors = [] 
    request.returnsObjectsAsFaults = false 
    request.fetchBatchSize = 20 

    let frc = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil) 
    let dataProvider = FetchResultControllerDataProvider(fetchedResultController: frc, delegate: self) 
    dataSource = TableViewDataSource(tableView: self.tableView, dataProvider: dataProvider, delegate: self) 
} 

Weder Methoden aus dem FetchResultControllerDataProvider aufgerufen werden, wenn ich Daten bin hinzufügen. Aber ich kann es nicht verstehen warum.

Jemand kann mir dabei helfen?

edit:

Hinzufügen von Daten:

func addTransaction() { 
    self.context.performChanges { 
     Transaction.insert(self.context, name: self.name.text!, amount: Double(self.amount.text!)!, type: self.currentTypeTag) 
    } 

public func saveOrRoleback() -> Bool { 

    do { 
     try save() 
     return true 
    } catch { 
     rollback() 
     return false 
    } 
} 

public func performChanges(block:() ->()) { 

    performBlockAndWait { 
     block() 
     self.saveOrRoleback() 
    } 
} 

Also dieser Teil des Codes genannt wird, und es gibt keine geworfen Fehler.
Aber ich habe versucht, die Core-Daten sql-Datei zu überprüfen, und es scheint leer zu sein. Also Daten werden nicht hinzugefügt.

+0

Sie hinzufügen Haben Sie versucht Super zu entfernen .drin()? –

+0

Wo in Ihrem Code fügen Sie Daten hinzu? Vielleicht müssen Sie mehr Code eingeben. –

+1

Was behält die Instanz? Wird es sofort zerstört? – Wain

Antwort

2

Sie müssen überprüfen, ob die Objekte delegate und abgerufeneResultsController noch aktiv sind und ordnungsgemäß ausgefüllt sind, wenn Sie die Daten hinzufügen. Können Sie versuchen, Werte für diese Variablen zu drucken?

self.fetchedResultController 

self.fetchedResultController.delegate 

Werden die Daten in Ihrem PersistentStore eingefügt werden, wenn Sie es hinzufügen?

1
NSFetchRequest *fetchRequest11 = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity1 = [NSEntityDescription entityForName:@"RemainderDataBase" inManagedObjectContext:[self managedObjectContext]]; 
    [fetchRequest11 setEntity:entity1]; 
    NSPredicate *p1=[NSPredicate predicateWithFormat:@"startdate < %@", [NSDate date]]; 
    [fetchRequest11 setPredicate:p1]; 
    NSError *fetchError; 
    NSError *error; 
    NSArray *fetchedProducts1=[managedObjectContext executeFetchRequest:fetchRequest11 error:&fetchError]; 
    for (NSManagedObject *product in fetchedProducts1) 
    { 
     [managedObjectContext deleteObject:product]; 
     [tableview reloadData]; 
    } 
    [managedObjectContext save:&error]; 
    [self.tableview reloadData]; 


self.FRC = [[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:[self managedObjectContext] sectionNameKeyPath:nil cacheName:nil]; 

    self.FRC.delegate = self; 

    NSError *fetchingErr=nil; 

    if ([self.FRC performFetch:&fetchingErr]) 
    { 
     NSLog(@"Succesfully Fetched data from RemainderDataBase"); 
    } 
    else 
    { 
     NSLog(@"Failed To Fetch data from RemainderDataBase"); 
    } 

die Fetch Anfrage Stellen Sie Ihre Daten

Hinweis retrive: setzen die Delegierten richtig

.. Und diese Linie in ViewDidLoad

id delegate = [[UIApplication sharedApplication] delegate]; 
    self.managedObjectContext = [delegate managedObjectContext]; 
Verwandte Themen