2016-05-19 4 views
0

Я создаю привязку Xamarin для SDK WePay.iOS, используя объективный сюжет. https://github.com/wepay/wepay-iosXamarin.iOS привязка для WePay

Мне удалось создать файлы APIDefinition.cs и StructsAndEnums.cs. Однако, когда я создал проект привязки, он не компилируется успешно.

[Export ("initWithSwipedInfo:")] 
    IntPtr Constructor (NSObject swipedInfo); 

    // -(instancetype)initWithEMVInfo:(id)emvInfo; 
    [Export ("initWithEMVInfo:")] 
    IntPtr Constructor (NSObject emvInfo); 

Я понимаю, что мне нужно изменить NSOB-объект на правильный тип данных. Однако, когда я смотрю в файл Objective C. Я не могу действительно понять, какой тип данных я должен использовать. Я ценю, если кто-то может вести меня в этом.

Objective-C Класс

@interface WPPaymentInfo : NSObject 
@property (nonatomic, strong, readonly) NSString *firstName; 
@property (nonatomic, strong, readonly) NSString *lastName; 
@property (nonatomic, strong, readonly) NSString *email; 
@property (nonatomic, strong, readonly) NSString *paymentDescription; 
@property (nonatomic, readonly) BOOL isVirtualTerminal; 
@property (nonatomic, strong, readonly) WPAddress *billingAddress; 
@property (nonatomic, strong, readonly) WPAddress *shippingAddress; 
@property (nonatomic, strong, readonly) id paymentMethod; 
@property (nonatomic, strong, readonly) id swiperInfo; 
@property (nonatomic, strong, readonly) id manualInfo; 
@property (nonatomic, strong, readonly) id emvInfo; 

- (instancetype) initWithSwipedInfo:(id)swipedInfo; 
- (instancetype) initWithEMVInfo:(id)emvInfo; 
- (instancetype) initWithFirstName:(NSString *)firstName 
         lastName:(NSString *)lastName 
         email:(NSString *)email 
       billingAddress:(WPAddress *)billingAddress 
       shippingAddress:(WPAddress *)shippingAddress 
        cardNumber:(NSString *)cardNumber 
          cvv:(NSString *)cvv 
         expMonth:(NSString *)expMonth 
         expYear:(NSString *)expYear 
       virtualTerminal:(BOOL)virtualTerminal; 

- (void) addEmail:(NSString *)email; 
@end 

ответ

0

swipedInfo и emvInfo внутренне типа NSMutableDictionary.

См here:

- (void) handleSwipeResponse:(NSDictionary *) responseData 
{ 
    NSDictionary *info = @{@"firstName"   : [WPRoamHelper firstNameFromRUAData:responseData], 
          @"lastName"   : [WPRoamHelper lastNameFromRUAData:responseData], 
          @"paymentDescription": pan ? pan : @"", 
          @"swiperInfo"  : responseData 
         }; 

    WPPaymentInfo *paymentInfo = [[WPPaymentInfo alloc] initWithSwipedInfo:info]; 
} 
+0

Но как мы можем иметь один и тот же тип данных с одинаковым количеством параметров. Это дало бы ошибку сборки? –

+0

@ LibinJoseph Я не знаю, как работает Xamarin, но на стороне iOS подписи методов разные. – y2chaits

0

@ y2chaits Xamarin работает поверх Mono, и это C#. C# не допускает перегрузки с той же сигнатурой. Таким образом, лучше создать конкретный тип данных. Вы тоже подумали, когда изменили WPAddress.

В этом случае вы можете установить один конструктор в NSObject, а второй - в NSDictionary (см. Здесь: https://github.com/dikoga/WePayBinding/blob/master/WePayBinding/ApiDefinition.cs). И ты будешь хорош.

Однако эта привязка уже выполнена. Он строит, но у него есть одна проблема (http://forums.xamarin.com/discussion/66446/how-to-get-more-information-when-the-app-crashes). Возможно, вы можете приложить некоторые усилия, чтобы помочь сделать работу, поскольку она уже находится на github.

Смежные вопросы