Я создал одноэлемент FacebookManager, который вызывается в фоновом потоке при запуске моего приложения. Все работает отлично с менеджером facebook, синглом, приложением и т. Д. Однако, когда приложение запускается впервые, это довольно много секунд, прежде чем оно будет полезно, потому что менеджер facebook еще не закончил делать свое дело. Поэтому я хочу использовать NSKeyedArchiver для сохранения facebookManager и всех его словарей, чтобы при запуске приложение имело навигационный интерфейс, в то время как данные facebook обновляются в фоновом режиме. Имеют смысл?Неисправность Использование NSKeyedUnarchiver во время init
Все в FacebookManager.m, первый, когда менеджер выполняется обновление словарей друзей и т.д., я вызываю метод, который сохраняет данные:
- (BOOL)saveFacebookData
{
// returns success or failure
NSString *path = [self archivePath]; // just a helper method
return [NSKeyedArchiver archiveRootObject:self toFile:path];
}
Тогда в INIT, я пытаюсь это, который, похоже, не работает. :
-(id)init
{
self = [super init];
NSString *path = [self archivePath];
self = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
// If the manager hadn't been saved previously, create a new new one
if (!self) {
if (_idsByNameDict == nil) {
_idsByNameDict = [[NSMutableDictionary alloc] init];
}
if (_photosByNameDict == nil) {
_photosByNameDict = [[NSMutableDictionary alloc] init];
}
if (_installedByNameDict == nil) {
_installedByNameDict = [[NSMutableDictionary alloc] init];
}
if (_allFriendsArray == nil) {
_allFriendsArray = [[NSArray alloc] init];
}
basicPermissions = NO;
extendedPermissions = NO;
// Create synchronous dispatch queue for all facebook activity
if (_facebookUpdateQueue == nil) {
_facebookUpdateQueue = dispatch_queue_create("com.facebookUpdateQueue", NULL);
}
}
Я думаю, что моя общая стратегия звук, но я спотыкаясь, как на самом деле захватить архивную версию менеджера во время инициализации! Любой совет?
Спасибо за комментарий. Я думаю, что моя проблема больше связана с тем, как я написал несколько верхних строк инициализации и меньше связан с реализацией NSCoding. Я думаю, это потому, что я уже реализовал NSCoding и оба этих метода, и я вижу, изучая структуру dir, которую я успешно архивирую на диск. Проблема ограничивается тем, как распаковывать во время init. Хорошая новость заключается в следующем: я нашел еще одну подобную должность SO, и этот пост содержит довольно хороший образец, который я попытаюсь использовать сегодня вечером, когда вернусь домой: – zeeple
http://stackoverflow.com/questions/2981269/initwithcoder-works- но-init-кажется-be-overw-my-objects-properties/2981453 # 2981453 – zeeple
Wow-wow-wow! Очень опасное предложение! Я читаю его и реализую, когда вы описываете. Но в этом случае метод дочерних классов 'initWithCoder' не называется! Проведите весь день, чтобы найти, что неправильно! Используйте '[NSKeyedUnarchiver unarchiveObjectWithData: data];' – skywinder