3

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);
        });

    }
};


}

そしてこれで呼び出します...

 [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 からの応答を探していました。

4

2 に答える 2

1

これが私が使用しているものです。self.container は の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];
}
于 2014-07-22T16:09:52.177 に答える