2016-06-05 2 views
2

Вот мой код:NSFetchedResultsControllerDelegate методы делегатов не называются

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) 
} 

Ни методы из FetchResultControllerDataProvider вызываются, когда я добавляю данные. Но я не могу понять, почему.

Кто-нибудь может мне помочь?

редактировать:

Добавление данных:

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() 
    } 
} 

Так эта часть кода называется, и нет никакой ошибки выброшен.
Но я попытался проверить основной файл sql-файла, и он кажется пустым. Поэтому данные не добавляются.

+0

Вы пытались удалить супер .в этом()? –

+0

Где в вашем коде вы добавляете данные? Возможно, вам нужно включить больше своего кода. –

+1

Что удерживает экземпляр? Это просто уничтожено немедленно? – Wain

ответ

2

Вам нужно проверить, все ли объекты делегирования и fetchedResultsController сохранены и правильно заполнены, когда вы добавляете данные. Можете ли вы попытаться напечатать значения для этих переменных?

self.fetchedResultController 

self.fetchedResultController.delegate 

ли данные вставляются в вашем PersistentStore, когда вы добавляете его?

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"); 
    } 

Установите Fetch запрос на retrive Ваши данные

Примечание: установленные делегаты должным образом ..

И добавьте эти строки в ViewDidLoad

id delegate = [[UIApplication sharedApplication] delegate]; 
    self.managedObjectContext = [delegate managedObjectContext]; 
Смежные вопросы