iOSのカメラロールに写真を保存し、その成功有無をC#のスクリプトに返したいと考えています。
処理が終了した後にCallbackされるメソッドをdelegateとしてxcodeに渡してます。
そのメソッドに引数を設定して、xcode側からメッセージを受け取るようにしたいのですが、うまくいきません。
ビルドも通らないため構文が間違えていると思うのですが、
参考サイトが少なく詰まってしまいました。
ご教授をお願いいたします。
ビルドエラー内容
/~~~/Plugins/iOS/Screenshot.mm:5:39: error: interface type 'NSString' cannot be passed by value; did you forget * in 'NSString'?
typedef void (*Callback)(NSString message);
/~~~/Plugins/iOS/Screenshot.mm:17:22: error: string literal must be prefixed by '@'
callback("Succeeded");
Screenshot.mm(全部)
lang
1#import <Foundation/Foundation.h> 2#import <AssetsLibrary/AssetsLibrary.h> 3 4extern "C" { 5 typedef void (*Callback)(NSString message); 6 void _ScreenshotWriteToAlbum(const char* path, Callback callback) { 7 UIImage *image = [UIImage imageWithContentsOfFile:[NSString stringWithUTF8String:path]]; 8 9 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 10 NSMutableDictionary *metadata = [[NSMutableDictionary alloc] init]; 11 12 [library writeImageToSavedPhotosAlbum:image.CGImage metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) { 13 if (error) { 14 callback([error localizedDescription]); 15 } else { 16 callback("Succeeded"); 17 } 18 }]; 19 } 20}
CaptureScreenShot.cs(一部)
lang
1 public delegate void Callback (string errorMessage); 2 [DllImport("__Internal")] 3 private static extern void _ScreenshotWriteToAlbum(string path, Callback callback); 4 5 void EndCapture(){ // これは別メソッドから呼び出されます 6 _ScreenshotWriteToAlbum (temporaryScreenshotPath,DidImageWriteToAlbum); 7 } 8 // カメラロール保存後、ネイティブ側から呼び出される。 9 [AOT.MonoPInvokeCallbackAttribute(typeof(Callback))] 10 static void DidImageWriteToAlbum (string errorMessage) { 11 Debug.Log ("【"+errorMessage+"】"); 12 }
こうじゃないか?というご意見だけでもかまいませんので、
よろしくお願いいたします。
=====追記=====
xcodeの一部を修正したらビルドは通りました。
typedef void (*Callback)(NSString message);
⇒typedef void (Callback)(NSString);
callback("Succeeded");
⇒callback(@"Succeeded");
しかし、コールバック(DidImageWriteToAlbum)は呼ばれるのですが、
メッセージが空(?)でログが出力されません。
【】
と出ています。
メッセージの渡し方に問題があるのか、
NSStringとstaringの変換が問題なのか、
わかる方いらっしゃいますでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。