MonoTouch Objective C Binding,Right Track?

时间:2012-06-08 20:58:00

标签: xamarin.ios

我正在尝试使用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];


}

1 个答案:

答案 0 :(得分:2)

您的绑定有几个问题。

构造函数必须声明为“IntPtr构造函数”,因此将“void InitWithKey”更改为:

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

第二个问题是你使用“initWithKey:”的导出只接受一个参数(我们知道这是因为冒号有一个实例),所以你可能需要找出构造函数的实际名称是,或使用单个参数(键),就像我在样本中所做的那样。

您对“DidStartSession”的绑定错误。看看签名是“manager:didStartSession:”所以它应该是:

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

您的UpdateLatitude也是错误的,再次,您添加的选择器不正确,我不知道它是什么,如果没有查看代码,但如果这真的得到两个参数(经度和纬度),它将看起来像这样(我正在制作选择器名称:

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

UpdateUserInfo也是错误的,很可能需要一个参数(再次猜测):

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

请注意,“info”字,参数的名称绝不是选择器名称的一部分。

getActivePromos的绑定也看起来不对,我怀疑它应该返回一个值,但你声明它返回void。

也可能存在其他问题。