質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2070閲覧

Xcodeからメッセージを返す方法

runun

総合スコア305

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2015/04/23 10:29

編集2015/04/23 11:39

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の変換が問題なのか、
わかる方いらっしゃいますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

delegateで送ったメソッドを呼ぶのではなく、
SendMessageを使う事で解決しました。

投稿2015/05/27 02:39

runun

総合スコア305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問