我正在尝试使用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];
}
答案 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。
也可能存在其他问题。