NSUbiquitousKeyValueStoreDidChangeExternallyNotification未触发

时间:2014-04-11 04:00:46

标签: ios iphone objective-c icloud key-value

我刚刚发布了我的应用,并意识到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];

}

我失踪了什么?

0 个答案:

没有答案