2013-02-09 2 views
0

В настоящее время я реализую пользовательский IASKSettingsStore для использования основных данных. Вы можете увидеть код ниже. Проблема в том, что хранение значений происходит крайне медленно. Например, когда я ввожу что-то в текстовое поле, я знаю, что IASKAppSettingsViewController сохраняет каждое изменение, но я понял, что даже одно изменение хранится очень медленно. Как я могу сделать эту работу быстрее?InAppSettingsKit и основные данные

Что я наблюдаю? Заранее спасибо.

До сих пор обычай IASKSettingsStore выглядит следующим образом:

@implementation GPSettingsStoreCoreData 

@synthesize managedObject = _managedObject; 

- (id)initWithManagedObject:(NSManagedObject *)managedObject { 
    self = [super init]; 
    if(self) { 
     _managedObject = managedObject; 
    } 
    return self; 
} 

- (id)init 
{ 
    if (self = [super init]) { 
     _managedObject = nil; 
    } 
    return self; 
} 

- (void)setBool:(BOOL)value forKey:(NSString*)key { 
    [self.managedObject setValue:[NSNumber numberWithBool:value] forKey:key]; 
} 

- (void)setFloat:(float)value forKey:(NSString*)key { 
    [self.managedObject setValue:[NSNumber numberWithFloat:value] forKey:key]; 
} 

- (void)setDouble:(double)value forKey:(NSString*)key { 
    [self.managedObject setValue:[NSNumber numberWithDouble:value] forKey:key]; 
} 

- (void)setInteger:(int)value forKey:(NSString*)key { 
    [self.managedObject setValue:[NSNumber numberWithInt:value] forKey:key]; 
} 

- (void)setObject:(id)value forKey:(NSString*)key { 
    [self.managedObject setValue:value forKey:key]; 
} 

- (BOOL)boolForKey:(NSString*)key { 
    return [[self.managedObject valueForKey:key] boolValue]; 
} 

- (float)floatForKey:(NSString*)key { 
    return [[self.managedObject valueForKey:key] floatValue]; 
} 

- (double)doubleForKey:(NSString*)key { 
    return [[self.managedObject valueForKey:key] doubleValue]; 
} 

- (int)integerForKey:(NSString*)key { 
    return [[self.managedObject valueForKey:key] intValue]; 
} 

- (id)objectForKey:(NSString*)key { 
    return [self.managedObject valueForKey:key]; 
} 

@end 

ответ

1

Ну, наконец-то я понял, сам где проблема. Не имеет ничего общего с InAppSettingsKit. Я представляю контроллер InAppSettingsKit в качестве модального контроллера представления с контроллера представления с помощью NSFetchedResultsController. Поэтому каждое изменение, которое я делаю в контроллере настроек, отправляет вызов делегату NSFetchedResultsController. В результате весь вид таблицы излишне перезагружается. Я решил это, используя контекст объектного объекта, управляемого ребенком, для контроллера модального представления. Я нашел очень полезную статью по этой теме: http://www.cocoanetics.com/2012/07/multi-context-coredata/

И пользовательский IASKSettingsStore для Core Data, который я опубликовал выше, работает довольно хорошо до сих пор, поэтому вы можете реализовать его в свой собственный проект, если хотите.

+0

Полезно знать, спасибо. Я был бы рад принять запрос на перенос на Github, если вы упакуете (и запишите в Readme) свое изменение! –