0

Я разрабатываю одно приложение iOS с использованием основных данных. Я использую Rest kit для подключения к веб-сервисам. С помощью набора для отдыха я синхронизирую данные из веб-сервис и хранение в моей локальной базе данных базы данных. Он отлично работает для меня. Когда я вызову запрос на выборку, данные будут исправлены. Но через некоторое время я хочу получить последние обновленные данные из веб-службы, если я снова синхронизирую, последние данные будут получать и заменять в моем db правильно.Запрос NSfetch Возвращает те же данные всегда не возвращает обновленные данные

Но если я попытаюсь извлечь последние данные, запрос выборки вернет первые данные, сохраненные в базе данных. Но если я перезапущу свое приложение, запрос выборки возвращает обновленные данные. Какова фактическая проблема. Я новичок в iOS, поэтому я не понимаю проблему. Как я решит проблему.

+2

, пожалуйста, напишите свой код. –

+0

@ Timuçin, код кода для получения кода? или код отображения данных? – user3762713

+0

Вы используете fetchedResultsController или просто fetchRequest? –

ответ

0

Попробуйте с NSFetchedResultsController

@property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController; 


- (void)viewDidLoad 
{ 
    [sef fetchAll]; 
} 


// initialize and fetch all data and also implements it's delgate 

#pragma mark Fetch All Data from core data 
-(void)fetchAll 
{ 
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"SongInfo"]; 
    NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"songTitle" ascending:YES]; 
    fetchRequest.sortDescriptors = @[descriptor]; 
    NSError *error = nil; 

    // Setup fetched results 
    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                    managedObjectContext:  [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext 
                     sectionNameKeyPath:nil 
                       cacheName:nil]; 
    [self.fetchedResultsController setDelegate:self]; 
    BOOL fetchSuccessful = [self.fetchedResultsController performFetch:&error]; 
    // NSAssert([[self.fetchedResultsController fetchedObjects] count], @"Seeding didn't work..."); 
    if (! fetchSuccessful) { 
    // RKTwitterShowAlertWithError(error); 
    } 

    if ([[self.fetchedResultsController fetchedObjects]count ]==0) { 
     // reload your table 
    } 
    else 
    { 

    } 

} 


    #pragma mark - NSFetchedResultsControllerDelegate 

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
    { 
    [tbl relodaData]; 
    // reload your view here 
    } 
+0

Я использую запрос выборки во многих местах. На самом деле в чем разница между запросом nsfetch и контроллером запросов nsfetch? – user3762713

+0

Получатель делегированных делегатов будет уведомлен о том, когда содержимое будет изменено, что даст делегату возможность анимировать изменения в виде таблицы. – Kalpesh

0

Сначала убедитесь, что вы звоните contextsave метод правильно после синхронизации локальной базы данных со службой REST.

Если вы используете fetchedResultsController, это может произойти из-за кэшированных данных. Попробуйте очистить данные в кэше, чтобы получить правильно обновленные данные,

- (NSFetchedResultsController *)fetchedResultsController { 

    if (_fetchedResultsController != nil) { 
    return _fetchedResultsController; 
    } 

    // Clear cache 
    [NSFetchedResultsController deleteCacheWithName:@"Root"]; 

    // Your codes 

} 
+0

Я не использую fetchedResultsController.Just только запрос на выборку. – user3762713

+0

Сначала я написал функцию сохранения контекста в делегате приложения, но теперь добавлю функцию сохранения контекста в свой контроллер представления и снова не проверил никаких изменений. – user3762713

+0

@ user3762713 Если вы используете REST Kit, данные из службы будут храниться с использованием 'mainQueueManagedObjectContext'' RKManagedObjectStore'. правильно? Используете ли вы тот же контекст для извлечения данных? –

Смежные вопросы