Tag: objective c block

IOS dispatch_get_main_queue()被多次调用

我使用Reachability和dispatch_async(dispatch_get_main_queue()testing互联网连接,当我testing下面的代码的时候,它会被多次调用。 家长: @protocol RootViewDelegate <NSObject> @optional -(void)internetIsDownGoToRoot; @end – (void)testInternetConnection { internetReachableFoo = [ReachabilityTony reachabilityWithHostname:@"www.google.com"]; __weak typeof(self) weakSelf = self; // Internet is reachable internetReachableFoo.reachableBlock = ^(ReachabilityTony *reach) { // Update the UI on the main thread dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"Yayyy, we have the interwebs!"); [weakSelf sendLoginRequest]; }); }; // Internet is not reachable internetReachableFoo.unreachableBlock = […]

Objective-C块中的NSString返回types遇到问题

谢谢你的帮助。 我的问题是下一个。 我需要使用AFNetworking,当请求请求到服务器时,服务器是响应。 这个结果我需要返回我的方法。 方法AFNetworking使用块成功或失败。 我想在返回服务器string(操作)成功或失败的选项块。 – (NSString *)executeMultipart:(NSURL *)url { __block NSString *strJSON; [_operationManager POST:[url absoluteString]parameters:_params constructingBodyWithBlock:^(id<AFMultipartFormData> formData){ [formData appendPartWithFormData:[_params objectForKey:TAG_PHOTO] name:TAG_PHOTO]; } success:^(AFHTTPRequestOperation *operation, id responseObject) { strJSON = [operation.responseString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; return strJSON; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { strJSON = [operation.responseString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; return strJSON; }]; } 但是显示错误: (')(AFHTTPRequestOperation * _strong,__ strong id)'的参数发送'NSString […]

方法在完成处理程序之前返回

我正在为我的项目开发一个networkUtil,我需要一个获取url的方法,并使用NSURLSessionDataTask从该URL返回从该服务器获取JSON的JSON。 方法如下: + (NSDictionary*) getJsonDataFromURL:(NSString *)urlString{ __block NSDictionary* jsonResponse; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *dataTask = [session dataTaskWithURL:[NSURL URLWithString:urlString] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; NSLog(@"%@", jsonResponse); }]; [dataTask resume]; return jsonResponse; } 问题是在我的方法和方法本身的completionHandler运行在不同的线程和最后一行jsonResponse总是零 我应该如何设置jsonResponse从urlString返回的json? 这个问题的最佳做法是什么?

NSOperation与完整块

我有一些image processing需要很多时间和资源,所以我使用NSOperation + NSOperatioQueue +委托为callBack。 和所有的工作。 现在我想要使用块,因为它在桌面视图中使用非常优雅和简单。 我需要做的只是像AFJSONRequestOperation例如: NSURL *url = [NSURL URLWithString:@"url"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { NSLog(@"App.net Global Stream: %@", JSON); } failure:nil]; [operation start]; 在这个例子中,我没有看到任何操作Queue! 我怎么能这样做? [ImageManagerOperation modifyImage:(UIImage*)image completitionBlock:(void (^)(UIImage *modifiedImage))complete]; ImageManagerOperation是一个NSOperation。 我知道我可以设置一个完成块,但我仍然需要在队列中添加操作。 我想尽量减less我的代码中的行号(如果可能:))。

从块内部variables

我正在使用AFNetworking 2从服务器获取数据,我需要找回responseObject但不pipe我做什么,我仍然得到<null> 。 这是发送GET请求到服务器的方法,并作为响应它获得NSDictionary ,我想用另一种方法… – (void)getCurrentVersionsForTimetableWithID:(NSString *)timetableID { [[AFHTTPRequestOperationManager manager] GET:[NSString stringWithFormat:VERSIONS, timetableID] parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { // Here I want to get responseObject } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Couldn't get current versions: %@", [error localizedDescription]); }]; } 如果我称这种方法一切正常。 但是当我尝试使它像这样返回NSDictionary : – (NSDictionary *)getCurrentVersionsForTimetableWithID:(NSString *)timetableID { __block NSDictionary *currentVersions; [[AFHTTPRequestOperationManager manager] […]

iOS – prepareForSegue不等待completionBlock完成

我喜欢什么:等到数据下载完成,然后打开TableView并显示data 。 我有什么:当prepareForSegue被称为TableView立即打开,无需等待data下载,虽然我有一个completionBlock (这可能不会正确实现我猜)。 注意:当我回去并再次打开TableView时,我看到data 。 – (void)fetchEntries { void (^completionBlock) (NSArray *array, NSError *err) = ^(NSArray *array, NSError *err) { if (!err) { self.articlesArray = [NSArray array]; self.articlesArray = array; } }; [[Store sharedStore] fetchArticlesWithCompletion:completionBlock]; } -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { [self fetchEntries]; if ([[segue identifier] isEqualToString:@"ShowArticles"]) { TableVC *tbc = segue.destinationViewController; tbc.articlesArrayInTableVC = self.articlesArray; […]

如何避免在iOS上延迟块调用的保留周期

我真的很难过这个。 我一直在阅读所有关于如何正确处理块内variables的信息。 注意:我不使用弧。 所以说,我有一个这样的animation: [UIView animateWithDuration:.5 animations:^{ textCard.alpha = 1.f; self.dotView.alpha = 1.f; self.subtitles.alpha = 0; }completion:^(BOOL finished){ [self.playerLayer removeFromSuperlayer]; self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.vidPlayer]; self.playerLayer.frame = self.vidView.bounds; [self.vidView.layer insertSublayer:self.playerLayer atIndex:0]; [self.subtitles removeFromSuperview]; self.subtitles = [sub autorelease]; [UIView animateWithDuration:.3 delay:1 options:UIViewAnimationOptionAllowUserInteraction animations:^{ textCard.alpha = 0.f; sub.alpha = 1.f; }completion:^(BOOL finished){ self.queuedVid = NO; if (self.shouldPlay == […]

iOS背景获取和完成块

我正在试图定义这个方法 – (void)backgroundFetchWithCompletion:(void(^)(UIBackgroundFetchResult))completionHandler; 不过,我得到一个错误UIBackgroundFetchResult说没有types的参数列表只是允许的,我按照本教程和本教程 ,这是他们如何定义他们的方法。

在后台线程读CGImageRef崩溃的应用程序

我有一个很大的JPEG图像,我想在我的opengl引擎asynchronous加载瓷砖。 如果它在主线程上完成,但一切都很好,但速度很慢。 当我试图把加载在一个NSOperationBlock的瓷砖,它总是崩溃时,试图访问我以前加载在主线程上的共享图像数据指针。 必须有一些我不能与后台操作,因为我假设我可以访问我在主线程上创build的内存部分。 我试图做的是以下几点: @interface MyViewer { } @property (atomic, assign) CGImageRef imageRef; @property (atomic, assign) CGDataProviderRef dataProvider; @property (atomic, assign) int loadedTextures; @end … – (void) loadAllTiles:(NSData*) imgData { queue = [[NSOperationQueue alloc] init]; //Loop for Total Number of Textures self.dataProvider = CGDataProviderCreateWithData(NULL,[imgData bytes],[imgData length],0); self.imageRef = CGImageCreateWithJPEGDataProvider(self.dataProvider, NULL, NO, kCGRenderingIntentDefault); for (int […]

块很可能会导致一个保留周期

我为NSOperationBlock写了以下类别 @implementation NSOperationQueue (Extensions) -(void)addAsynchronousOperationWithBlock:(void (^)(block))operationBlock { dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); block signal = ^ { dispatch_semaphore_signal(semaphore); }; [self addOperationWithBlock:^{ operationBlock(signal); dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); dispatch_release(semaphore); }]; } @end 它似乎工作正常,但当我打电话(如下面的代码片段所示),我得到一个警告: 区块很可能会导致保留周期 [_queue addAsynchronousOperationWithBlock:^(block signal) { [self foo:nil]; signal(); }]; foo是使用这个类的类的一个方法。 与addOperationWithBlock:相同的代码addOperationWithBlock:来自NSOperationQueue )不显示警告: [_queue addOperationWithBlock:^ { [self foo:nil]; }]; 我真的不明白这一点。 特别是我不明白的是,在两种情况下,我应该使用弱指针吗? 实际上这两个片段会带来保留周期,以防我不使用弱指针?