我创建了一个 FacebookManager 单例,它在我的应用启动时在后台线程上被调用。facebook 管理器的单例、应用程序等一切正常。但是,当应用程序第一次启动时,它是有用的,因为 facebook 管理器还没有完成它的工作。所以我想做的是使用 NSKeyedArchiver 保存 facebookManager 及其所有字典,以便在启动时,应用程序具有可导航界面,而 facebook 数据正在后台更新。说得通?
所有在 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);
}
}
我认为我的总体策略是合理的,但我正在考虑如何在初始化期间实际获取管理器的存档版本!有什么建议吗?