iOS7ベースに、アプリのプログラムをしていたら、
iOS4.3ではよく落ちる。
落ちる原因の1つ、
[NSURLConnection sendAsynchronousRequest:request queue:mainQueue completionHandler:completionBlock]
を解決しました。
まずはメソッドを追加します。
-(void)sendAsynchronousRequest:(NSURLRequest*)request queue:(NSOperationQueue*)queue completionHandler:(void(^)(NSURLResponse *response, NSData *data, NSError *error))handler { __block NSURLResponse *response = nil; __block NSError *error = nil; __block NSData *data = nil; // Wrap up synchronous request within a block operation NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{ data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; }]; // Set completion block // EDIT: Set completion block, perform on main thread for safety blockOperation.completionBlock = ^{ // Perform completion on main queue [[NSOperationQueue mainQueue] addOperationWithBlock:^{ handler(response, data, error); }]; }; // (or execute completion block on background thread) // blockOperation.completionBlock = ^{ handler(response, data, error); }; // Execute operation [queue addOperation:blockOperation]; }
そして、今までの呼び出し元で、
if ([UIDevice currentDevice].systemVersion.floatValue < 5.0) { [self sendAsynchronousRequest:urlRequest queue:[NSOperationQueue mainQueue] completionHandler:handler]; } else { [NSURLConnection sendAsynchronousRequest:urlRequest queue:[NSOperationQueue mainQueue] completionHandler:handler]; }としました。 handlerはすでに宣言されているブロックです。 これでiOS4.3で落ちる事が無くなりました。 よかったよかった。 参考: NSURLConnection sendAsynchronousRequest:queue:completionHandler not working in iOS 4.3 | stackoverflow
0 件のコメント:
コメントを投稿