2013-11-20 2 views
0

То, что я пытаюсь сделать, довольно просто.Получение записи с использованием даты из данных ядра

  1. Я сохраняю запись в таблице Core-Data.
  2. Сохранение даты записи в качестве временного интервала в пользовательских значениях по умолчанию.
  3. Пытается восстановить запись снова с помощью преобразования Interval i.e в Date.

Однако каждый раз, когда я получаю пустой массив. FYI Я также проверяю, действительно ли запись была сохранена или нет, и даже если она сохранила результат, будет пуст.

метода, чтобы сохранить записи и хранение Дату интервального

RequestInfo * newEntry = [NSEntityDescription insertNewObjectForEntityForName:@"RequestInfo"inManagedObjectContext:self.managedObjectContext]; 

newEntry.jukeboxPhoneNo = request.L; 
newEntry.trackName = request.TN; 
newEntry.trackNo = request.T; 
newEntry.date = [NSDate date]; 

NSTimeInterval lastID = [newEntry.date timeIntervalSince1970]; 
NSUserDefaults* prefs = [NSUserDefaults standardUserDefaults]; 
[prefs setObject:[NSString stringWithFormat:@"%f", lastID] forKey:LAST_REQUEST_ID_KEY]; 
[prefs synchronize]; 

if (![self.managedObjectContext save:&error]) { 
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
} 
else { 
    NSLog(@"Object is saved"); 
} 

метод для Retrive ЗАПИСИ

NSUserDefaults* prefs = [NSUserDefaults standardUserDefaults]; 
NSString* lastDateInterval = (NSString*)[prefs objectForKey:LAST_REQUEST_ID_KEY]; 
NSTimeInterval lastID = [lastDateInterval doubleValue]; 
NSLog(@"Last ID %f", lastID); 
// Check it 
if(lastID!=0) { 
    NSDate* soughtDate =[[NSDate alloc] initWithTimeIntervalSince1970:lastID]; 

    NSEntityDescription *productEntity=[NSEntityDescription entityForName:@"RequestInfo" inManagedObjectContext:self.managedObjectContext]; 

    NSFetchRequest *fetch=[[NSFetchRequest alloc] init]; 
    [fetch setEntity:productEntity]; 

    NSPredicate *p= [NSPredicate predicateWithFormat:@"(date >=%@) AND (date <= %@)", soughtDate, soughtDate]; 
    [fetch setPredicate:p]; 
    NSError *fetchError; 
    NSArray *fetchedProducts = [self.managedObjectContext executeFetchRequest:fetch error:&fetchError]; 
    RequestInfo* request = [fetchedProducts objectAtIndex:0]; 

Я попытался == в предикате, но это не сработало. Он возвращает мне пустой массив каждый раз. Я начал программировать в объективе-c довольно недавно, поэтому я тоже мог совершить глупую ошибку.

+0

Почему временной интервал и строка? – Wain

ответ

0

Лучший способ сделать это, чтобы иметь еще один столбец и присвоить ему уникальный идентификатор с помощью переменной и сохранить его в настройках пользователя. Я нашел это довольно простым и полезным.

1

Сохраните новыйEntry.objectID в пользовательских настройках, а затем получите ManagedObject с помощью objectID. Это определенно будет уникальным ключом для входа.

+0

Правильный подход. Другой альтернативой было бы просто сохранить NSDate в пользовательских настройках по умолчанию напрямую, вместо того чтобы преобразовать его в NSTimeInterval и затем преобразовать его в NSString. –

+0

Извините, я попробовал, но пользовательские настройки не сохраняют идентификатор или его представление URI. – jeevs

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