任何工作的示例代码CKDiscoverAllContactsOperation的IOS8测试版CloudKit



我一直在ios 8测试版中使用icloud, CloudKitAtlasAnIntroductiontoCloudKit示例项目非常有帮助。https://developer.apple.com/library/prerelease/ios/samplecode/CloudAtlas/Introduction/Intro.html

但是我想使用CKDiscoverAllContactsOperation类,我找不到任何地方的任何示例代码,在线文档不是很有帮助。https://developer.apple.com/library/prerelease/ios/documentation/CloudKit/Reference/CKDiscoverAllContactsOperation_class/index.html

如果有人成功地使用了CKDiscoverAllContactsOperation,你能帮我指出正确的方向或显示一个工作的例子,它应该如何被称为?

我试过了,看看我是否能从iCloud得到响应,但没有:

- (void)queryForRecordsOtherUsersInAddressBookcompletionHandler:(void (^)(NSArray *records))completionHandler {
CKDiscoverAllContactsOperation *discoverAllContactsOperation= [[CKDiscoverAllContactsOperation alloc] init];
[discoverAllContactsOperation setContainer:_container];
NSMutableArray *results = [[NSMutableArray alloc] init];

discoverAllContactsOperation.discoverAllContactsCompletionBlock = ^(NSArray *userInfos, NSError *operationError) {
    [results addObjectsFromArray:userInfos];
};

discoverAllContactsOperation.discoverAllContactsCompletionBlock=^(NSArray *userInfos, NSError *operationError){
    if (operationError) {
        // In your app, handle this error with such perfection that your users will never realize an error occurred.
        NSLog(@"An error occured in %@: %@", NSStringFromSelector(_cmd), operationError);
        abort();
    } else {
        dispatch_async(dispatch_get_main_queue(), ^(void){
            completionHandler(results);
        });
    }
};

}

和调用this…

 [self.cloudManager queryForRecordsOtherUsersInAddressBookcompletionHandler:^(NSArray *records ) {
                if (records.count==0){
                    NSLog(@"Login name not found");
                    return;
                }
                //self.results= records;
                //_loggedInRecord = self.results[0];
                //NSLog(@"%@,%@",_loggedInRecord[@"lastName"],_loggedInRecord[@"firstName"]);
               // [self performSegueWithIdentifier:@"loggedInSegue" sender:self ];
            }];

我知道代码实际上不应该做任何事情。我只是在寻找iCloud的响应。

这是我使用的。自我。容器为CKContainer, [CKContainer defaultContainer]init中。

  -(void)queryForAllUsers: (void (^)(NSArray *records))completionHandler {
    CKDiscoverAllContactsOperation *op = [[CKDiscoverAllContactsOperation alloc] init];
    [op setUsesBackgroundSession:YES];
    op.queuePriority = NSOperationQueuePriorityNormal;
    [op setDiscoverAllContactsCompletionBlock:^(NSArray *userInfos, NSError *error) {
        if (error) {
            NSLog(@"An error occured in %@: %@", NSStringFromSelector(_cmd), error);
            //abort();
        } else {
     //       NSLog(@"Number of records in userInfos is: %ld", (unsigned long)[userInfos count]);
            dispatch_async(dispatch_get_main_queue(), ^(void){
                completionHandler(userInfos);
            });
        }
    }];
    [self.container addOperation:op];
}

在使用CKDiscoverAllContactsOperation操作之前,首先需要请求权限。

请使用requestApplicationPermission:completion:方法

func discoverAllContacts() {
    let container = CKContainer.defaultContainer()
    //Request for user permission
    container.requestApplicationPermission([.UserDiscoverability]) { [weak self] status, error in
        switch status {
        case .Granted where error == nil:
            let operation = self?.discoverAllContactsOperation { usersInfo in
                //do something here
            }
            if let operationExists = operation {
                //Assuming there is a NSOperationQueue property called operationQueue
                self?.operationQueue.addOperation(operationExists)
            }
        default:
            break
        }
    }
}
func discoverAllContactsOperation(completionHandler: ([CKDiscoveredUserInfo]?) -> ()) -> NSOperation {
    let operation = CKDiscoverAllContactsOperation()
    operation.discoverAllContactsCompletionBlock = { usersInfo, error in
        if error == nil {
            print("Discoverd all contacts = (usersInfo)")
            completionHandler(usersInfo)
        }
        else {
            print("Discoverd all contacts error = (error)")
            completionHandler(nil)
        }
    }
    return operation
}

最新更新