适用于IOS8 beta CloudKit的CKDiscoverAllContactsOperation的任何工作示例代码?
我一直在ios 8 beta中玩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的回复。
这是我正在使用的。 self.container是一个在init
使用[CKContainer defaultContainer]
设置的[CKContainer defaultContainer]
。
-(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 }
- 嵌套推animationiOS7的错误?
- iPhoneconfiguration实用程序未能find“Apple Mobile Device Support”
- 使用正则expression式匹配emojis以及string中的文本
- Alamofire和Objectmapper将数据添加到tableview
- 内部有资源的IOS静态框架
- 标准位置服务在后台运行的iOS 4应用程序生命周期行为
- 这种方法总是给我当天的12:00:00在ios?
- 生成用于使用Rest服务的Objective-c客户端代码
- NSFetchedResultsController不会调用controllerDidChangeContent:更新到未获取的NSManagedObject