2016-03-20 18 views
2

私はUIImageWriteToSavedPhotosAlbumを呼び出し、問題なく完了を処理することができる午前:私はsaveNow()静的関数を作りたい場合は、スタティック関数を使用して補完ハンドラでUIImageWriteToSavedPhotosAlbum()を呼び出す方法

class A { 
    func saveNow() { 
     UIImageWriteToSavedPhotosAlbum(someImage, self, "saveImage:didFinishSavingWithError:contextInfo:", nil) 
    } 

    func saveImage(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo:UnsafePointer<Void>) { 
     // handle completion 
    } 
} 

しかし、私は私が処理できるように正しくcompletionTarget & completionSelectorを設定することはできませんよ完了:

class B { 
    static func saveNow() { 
     UIImageWriteToSavedPhotosAlbum(someImage, /* how to set here */) 
    } 

    static func saveImage completionSelector(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo:UnsafePointer<Void>) { 
    } 
} 

静的関数を使用する場合、クラスBを変更するにはどうすればよいですか?

答えて

2

ターゲットをYourClassName.selfに設定する必要があります。ところで

すなわち、

UIImageWriteToSavedPhotosAlbum(someImage, YourClassName.self, "saveImage:didFinishSavingWithError:contextInfo:", nil) 

は、あなたの関数名が正しくありません:

//Note the space between saveImage and completionSelector 
static func saveImage completionSelector(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo:UnsafePointer<Void>) 

私はそれがあるべきだと思う:

static func saveImageWithCompletionSelector(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo:UnsafePointer<Void>) 

したがって、我々はする必要があるかもしれません対応する変更を行います:

UIImageWriteToSavedPhotosAlbum(someImage, YourClassName.self, "saveImageWithCompletionSelector:didFinishSavingWithError:contextInfo:", nil) 

私はちょうど前述の変更と提案で簡単なテストを実行しました。フォトアルバムにアクセスするための承認を求めるポップアップが必要です。

+0

ありがとうございます。機能名を残念に思っています。コードコピー/貼り付けは私の間違いでした。そして、私は 'someClassName.self'で試しましたが、アプリがセレクタメソッドを見つけることができなかったというエラーがまだありました。私は最終的に 'class B'が' NSObject'を継承しなければならないという解決策を見つけました。 –

+0

しかし、実際にNSObjectを継承する必要がある理由はわかりません。誰かがさらなるコメントを与えることができれば、それは役に立つでしょう。ありがとう。 –

関連する問題