6

MonoTouchを使用して作成したアプリにTestFlightSdkを統合しようとしています。

TestFlightSdk によって取得されるように、アプリにログを実装しようとしています。自動的にテキストを取得すると思われますが、同じことを行う C#/ MonoTouchNSLogで記述された自分のアプリに追加するコードの正しい組み合わせを見つけることができないようです。

私が試したこと:

  1. Console.WriteLine("...");
  2. Debug.WriteLine("...");(しかし、これは単に呼び出すと思いますConsole.WriteLine
  3. のサポートを実装してNSlogいますが、これによりアプリがクラッシュしたため、何か間違ったことをしたようです (これが進むべき道である場合は、新しい質問をします。)

TestFlightSdk で使用できるように、NSLog を介してログ メッセージを書き込む MonoTouch に組み込まれているものはありますか? または、NSLog 用に独自のラッパーを作成する必要がありますか?

自分で NSLog を実装するために、これを追加しました。

public static class Logger
{
    [DllImport("/System/Library/Frameworks/Foundation.framework/Foundation")]
    private extern static void NSLog(string format, string arg1);

    public static void Log(string message)
    {
        NSLog("%s", message);
    }
}

(上記のコードの一部は、他の SO の質問: How to I bind to the iOS Foundations function NSLog から取得しました。)

しかし、これは SIGSEGV 障害でアプリをクラッシュさせます。

4

3 に答える 3

9
using System;
using System.Runtime.InteropServices;
using Foundation;

public class Logger
{
    [DllImport(ObjCRuntime.Constants.FoundationLibrary)]
    private extern static void NSLog(IntPtr message);

    public static void Log(string msg, params object[] args)
    {
        using (var nss = new NSString (string.Format (msg, args))) {
            NSLog(nss.Handle);
        }
    }
}
于 2012-02-09T07:11:20.267 に答える
2

アヌジは道を示しました、そしてこれは私が最終的に得たものです:

[DllImport(MonoTouch.Constants.FoundationLibrary)]
private extern static void NSLog(IntPtr format, IntPtr arg1);

そしてそれを呼び出す:

using (var format = new NSString("%@"))
using (var arg1 = new NSString(message))
    NSLog(format.Handle, arg1.Handle);

単一のパラメーターだけを試したところ、文字列にパーセンテージ文字が含まれていると、文字列をフォーマットしようとしたと解釈されましたが、引数がなかったため、クラッシュしました。

于 2012-02-09T11:53:06.687 に答える