我刚刚发布了我的应用,并意识到NSUbiquitousKeyValueStoreDidChangeExternallyNotification
未被解雇。
我需要它在用户第一次打开应用程序注册他时被解雇(并检查它之前是否已经是用户)。
问题在于,如果通知未被解雇,那么我的应用将被卡住。
我使用键值并在Xcode中正确设置
现在,通过我的iphone和开发者资料,一切都很棒。 使用分发配置文件时,它不会。
我已经启用了icloud的生产配置文件(并且启用了icloud的应用ID)。
在我的应用中,即使在应用商店版本中,这两个参数都很好:
_currentiCloudToken = [[NSFileManager defaultManager] ubiquityIdentityToken];
_myUbiquityContainer = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier: nil];
这是我的代码:
- (id)initWithCloudStore:(NSUbiquitousKeyValueStore *) store {
if ((self = [super init])) {
_iCloudStore = store;
_currentiCloudToken = [[NSFileManager defaultManager] ubiquityIdentityToken];
_myUbiquityContainer = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier: nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(storeDidChange:)
name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
object:_iCloudStore];
}
return self;
}
-(BOOL) iCloudIsEnabled {
if(_currentiCloudToken && _myUbiquityContainer != nil) return TRUE;
else return FALSE;
}
-(void) sync {
if([_iCloudStore synchronize]) NSLog(@"iCloud Sync OK");
}
-(void) storeDidChange:(NSNotification*)notification {
NSString *iCloudUUID = [_iCloudStore objectForKey:userUUIDKey];
if(iCloudUUID != nil) {
NSLog(@"iCloud UUID present with value %@",iCloudUUID);
//[[iCloudHelper sharedInstance] removeObjectForKey:userUUIDKey];
// sostituisco uuid locale con quello di icloud
[[NSUserDefaults standardUserDefaults] setObject:iCloudUUID forKey:userUUIDKey];
[[NSUserDefaults standardUserDefaults] synchronize];
} else {
// salvo uuid in iCloud
NSLog(@"UUID not present on iCloud");
[_iCloudStore setObject:[self createNewUUID] forKey:userUUIDKey];
}
int reason = [[[notification userInfo] objectForKey:NSUbiquitousKeyValueStoreChangeReasonKey] intValue];
if(reason == NSUbiquitousKeyValueStoreInitialSyncChange) {
NSLog(@"This was the initial sync");
}
[[NSNotificationCenter defaultCenter] postNotificationName:@"iCloudDone" object:nil];
}
我失踪了什么?