

APIを叩いた後にアラートを出し、そのイベントを拾ってから次のイベントに進みたいのですが、クロージャ内で`delegate:
self`を指定しても、イベントが拾われません。  
Objective-Cは触っておらず、swiftも初心者なので解決法が浮かばずに困っております。

[code]

    typealias CompletionHandler = (result: Bool?) -> Void
    
    class hogeViewController: UIViewController, UIAlertViewDelegate {
    
        var completion: CompletionHandler?
    
        func test(completion: (result: Bool) -> Void) {
    
            let request = NSURLRequest(URL: NSURL(string: apiUrl)!)
            NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) in
    
                let alert = UIAlertView(
                    message: testMessage
                    delegate: self,
                    cancelButtonTitle: nil,
                    otherButtonTitles: "test1", "test2")
                alert.show()
                return
            })
        }
    
        func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {
            println("clickedButtonAtIndex")
            println(buttonIndex)
    
            self.completion!(result: true)
        }
    }
    
[/code]

お詳しい方がいましたらご回答宜しくお願い致します。


CC BY-SA 3.0
2015-03-01T03:53:12.643
7262
2015-03-01T05:31:11.530
8612
question
swift
クロージャ内で指定したdelegateでイベントが拾えない


コンパイルが通らなかったので細部を直しましたが、私の環境ではちゃんとUIAlertViewのボタンイベントが拾われました。  
環境：iPhone6（iOS8.1.3）

ちなみに UIAlertView はiOS8から非推奨なので、iOS8以上なら代わりにUIAlertControllerを使うことを推奨します。

[code]

    typealias CompletionHandler = (result: Bool?) -> Void
    
    class ViewController: UIViewController, UIAlertViewDelegate {
    
        let apiUrl = "https://www.google.co.jp"
    
        var completion: CompletionHandler? = {(result: Bool?) in
            println("API completed! \(result)")
        }
    
        func test() {
            let request = NSURLRequest(URL: NSURL(string: apiUrl)!)
            NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) in
    
                let alert = UIAlertView(
                    title: "アラートのタイトル",
                    message: "アラートのメッセージ",
                    delegate: self,
                    cancelButtonTitle: nil,
                    otherButtonTitles: "test1", "test2")
                alert.show()
                return
            })
        }
    
        func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {
            println("clickedButtonAtIndex")
            println(buttonIndex)
    
            self.completion?(result: true)
        }
    }
    
[/code]


CC BY-SA 3.0
2015-03-01T05:31:11.530
7264
2015-03-01T05:31:11.530
8148
7262
answer