0

私はkiipライブラリでこれをやろうとしています:

http://docs.xamarin.com/ios/advanced_topics/binding_objective-c_types

バインディング プロジェクトが見つからないというエラーが表示されますが、プロジェクトへの参照を追加しました。

次のようなコードを使用しますか?

public override void ViewDidLoad ()
    {
        var kp = new KiipMonoTouchBinding.IKPManager();

            kp.InitWithKey("abc", "123");

    }

私はこれを正しくやっていますか?

  namespace KiipMonoTouchBinding
{
interface IKPManager
{
    //kiip code

    //KPManager* manager = [[KPManager alloc] initWithKey:@"0b56b49f621ad7f42fd85de7e461f9dd" secret:@"ac3abfdf5cb86ce0febba0c8afd2744e" testFrequency:100];
    [Export("initWithKey:")]
    void InitWithKey(string key, string secret);

//[[KPManager sharedManager] unlockAchievement:@"_achievement_id_"];
    [Export ("unlockAchievement:")]
    void UnlockAchievement(string achivementId);

//
//- (IBAction)saveLeaderboard {
//    NSLog(@"save leaderboard");
//    [[KPManager sharedManager] updateScore:100 onLeaderboard:leaderboard_id.text];
//}

//[[KPManager sharedManager] updateScore:_score_ onLeaderboard:@"_leaderboard_id_"];

    [Export("updateScore:")]
    void UpdateScore(int score, string leaderboardId);

    //- manager:(KPManager*)manager didStartSession:(NSDictionary*)response {
    [Export("didStartSession:response")]
    void DidStartSession(NSDictionary response);

    //updateLatitude:(double)37.7753 longitude:(double)-122.4189];
    [Export("updateLatitude:_latitude, longitude")]
    void UpdateLatitude(double latitude, double longitude);

    [Export("updateUserInfo:info")]
    void UpdateUserInfo(NSDictionary info);

    // [[KPManager sharedManager] getActivePromos];
    [Export("getActivePromos")]
    void GetActivePromos();




// Update the user's location
// [manager updateLatitude:_latitude_ longitude:_longitude_];

// Update the User's information
// NSDictionary* info = [[[NSDictionary alloc] initWithObjectsAndKeys:
                    //    _email_, @"email",
                   //     _alias_, @"alias",
                  //      nil]
                 //     autorelease];
//  [manager updateUserInfo:info];


}
4

1 に答える 1

2

あなたのバインディングにはいくつかの問題があります。

コンストラクターは「IntPtr コンストラクター」として宣言する必要があるため、「void InitWithKey」を次のように変更します。

 [Export ("initWithKey:")]
 IntPtr Constructor (string key);

2 番目の問題は、"initWithKey:" を使用しているエクスポートが単一のパラメーターを取ることです (コロンのインスタンスが 1 つあるため、これはわかっています)。そのため、コンストラクターの実際の名前を調べる必要がある場合があります。サンプルで行ったように、単一のパラメーター (キー) を使用します。

「DidStartSession」のバインディングが間違っています。「manager:didStartSession:」である署名を見てください。次のようになります。

 [Export ("manager:didStartSession:")]
 void DidStartSession (KPManager manager, NSDictionary sessionREsponse);

あなたの UpdateLatitude も間違っています。また、追加したセレクターが正しくありません。コードを見ずにそれが何であるかを推測することはできませんが、これが実際に 2 つのパラメーター (経度と緯度) を取得する場合、次のようになります (私が作成しているセレクター名を上に):

 [Export ("updateLatitude:andLongitude:")]
 void UpdateLocation (double latitude, double longitude)

UpdateUserInfo も間違っています。ほとんどの場合、単一のパラメーターを使用します (もう一度推測します)。

 [Export ("updateUserInfo:")]
 void UpdateUserInfo (NSDictionary info)

パラメータの名前である「情報」という単語は、決してセレクタ名の一部ではないことに注意してください。

getActivePromos のバインディングも間違っているように見えます。値を返す必要があると思いますが、void を返すと宣言しました。

他にも問題があるかもしれません。

于 2012-06-09T17:38:58.430 に答える