Tag:

返回从块内部设置的NSString

我有一个看起来像这样的方法: -(NSString *)getCityFromLocation:(CLLocation *)location { __block NSString *city; CLGeocoder *geocoder = [[CLGeocoder alloc] init]; [geocoder reverseGeocodeLocation: location completionHandler: ^(NSArray *placemarks, NSError *error) { //Get address CLPlacemark *placemark = [placemarks objectAtIndex:0]; city = [placemark.addressDictionary objectForKey:@"City"]; NSLog(@"city 1: %@", city); }]; return city; } 我这样称呼它: NSString *city = [self getCityFromLocation:currentLocation]; NSLog(@"city 2: %@", city); 在NSLog中,我得到: city 2: […]

当CAEmitterLayer结束CAEmitter单元的生命周期时,如何移除CAEmitterLayer – 而不是直到从超级层中移除CAEmitterLayer

我使用generics代码(来自iOS Fireworks演示)稍微改变了一下。 我有以下在UIView的子类。 我想要的是让烟花出现在用户触摸的地方(不难),并在CAEmitterLayer / CAEmitterCells的“生命周期”长度上播放。 相反,这是立即开始,当我把它添加到addSublayer – 就像我相信它的意思。 不过,我想用稍微不同的方式来使用它。 有没有办法,我可以改变这个,所以有一个完成块(removeFromSuperlayer)或类似的东西的CATransaction? 任何想法都欢迎。 #import "FireworksView.h" @implementation FireworksView – (void)launchFirework{ //Load the spark image for the particle CAEmitterLayer *mortor = [CAEmitterLayer layer]; mortor.emitterPosition = CGPointMake(self.bounds.size.width/2, self.bounds.size.height*(.75)); mortor.renderMode = kCAEmitterLayerAdditive; //Invisible particle representing the rocket before the explosion CAEmitterCell *rocket = [CAEmitterCell emitterCell]; rocket.emissionLongitude = -M_PI / 2; […]

带有代码块的存根方法作为OCMock的参数

有没有一种方法来存根方法,这是因为它的参数块? 例如mehod: – (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;

阻止和保留周期

一个小问题:为什么Xcode抱怨listing 1会导致保留周期,而在listing 2却不会呢? 在这两种情况下, _clients都是一个int实例variables。 在listing 2它在init方法中被赋值为0 。 背景信息:我想执行块中的循环,只要至less有一个客户端正在从iPhone加速计请求更新,我将其发布到一个redis通道。 如果没有更多的客户端,循环将退出并停止发布加速计数据。 Listing 2来自我写的一个小testing应用程序,以validation我的想法是否有效。 Listing 1在实际项目中实现。 清单1 – (id)init { self = [super init]; if (self) { _clients = 0; /** * The callback being executed */ _callback = ^ { while (_clients > 0) { // Capturing 'self' strongly in this block is likely to lead […]

完成块完成后如何调用方法?

我想先调用signUp方法,一旦我得到了userID,我需要调用另一个方法normalSignupMethod 。 [ConnectionObj signUp:user]; [helper normalSignupMethod:dict]; 注册方法: [MYRequest signUp:user successBlock:^(QBResponse *response, QBUUser *user) { // Sign up was successful // Store user id [SingletonClass sharedMySingleton].userID = [NSString stringWithFormat:@"%@",response.data[@"id"]]; } errorBlock:^(QBResponse *response) { // Handle error here NSLog(@" error in creating session %@", response.error); [SVProgressHUD showErrorWithStatus:NSLocalizedString(@"SignUp to Chat error!", nil)]; }]; 这我怎么叫: dispatch_group_t group = dispatch_group_create(); […]

在ARC中生成CGImagesAsynchronouslyForTimes

如果我在启用ARC的项目中运行以下项目,则完成处理程序不会触发。 但没有ARC,它按预期工作。 我在这里错过了什么? NSURL *url = [NSURL URLWithString:@"http://media.w3.org/2010/05/sintel/trailer.mp4"]; AVURLAsset *asset=[[AVURLAsset alloc] initWithURL:url options:nil]; AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; generator.appliesPreferredTrackTransform = YES; CMTime thumbTime = CMTimeMakeWithSeconds(5,30); AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){ NSLog(@"completion handler"); }; generator.maximumSize = CGSizeMake(320, 180); [generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:thumbTime]] completionHandler:handler];

为什么我们在@synchronized块中传递self?

我猜@synchronized块不是对象依赖,但线程依赖…对吗? 那么为什么我们要过自我?

NSTimer不会失效

我有一个问题,使我的计时器无效。 @property (nonatomic, strong) NSTimer *timer; 在我的成功块内,我正在主线程上分配和设置我的计时器: dispatch_async(dispatch_get_main_queue(), ^{ self.timer = [NSTimer scheduledTimerWithTimeInterval:[Config refreshInterval].integerValue target:self selector:@selector(methodThatHasABlockCalledMentionedAbove) userInfo:nil repeats:NO]; }); 在我的textFieldDidBeginEditing我无效我的计时器是这样的: dispatch_async(dispatch_get_main_queue(), ^{ [self.timer invalidate]; self.timer = nil; }); 我的方法仍然在计时器上执行。 有什么收获?

在块外返回一个variables值 – Objective-C,iOS

我有下面的代码,连接到一个URL,并获取一些头响应,如http代码响应和最终的URL(redirect的情况下): – (NSString *)test { __block NSString *cod = @"x"; NSString *urlString = @" http://www.google.com "; NSURL *url = [NSURL URLWithString:urlString]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:15.0f]; [request setHTTPMethod:@"HEAD"]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; NSURL *resolvedURL = [httpResponse URL]; NSString *code = [NSString stringWithFormat:@"%ld", […]

Objective-C块,recursion失败

Sup家伙, 我试图做一个自我调用的function,但把所有的东西放在一个块上, 正如你所看到的,下面的函数被称为无限次(直到arcrandom返回一个低于50的数),你应该期望输出一个可变数量的“RUNNING”消息,这取决于机会。 void (^_test_closure)(void) = ^ { NSLog(@"RUNNING"); if(arc4random() % 100 > 50) { _test_closure(); } }; _test_closure(); 但是,运行它时,我得到一个EXC_BAD_ACCESS错误,我发现的原因是当代码尝试调用闭包内的_test_closure时,它基本上指向无处。 有谁知道如何使上面的代码工作?