1

私は現在、ARCを使用してPaypalのMECLを既存のIOSプロジェクトに統合しようとしています。

コード内のすべてのリリース/保持を手動で削除することで、ARC互換になるはずです。

変換方法がわからないステートメントは1つだけです。「InitAndDealloc」は、次のようないくつかのクラスにあります。

static NSString *SolutionTypeStrings[] = {@"Sole", @"Mark"};
static NSString *LandingPageTypeStrings[] = {@"LandingPage", @"Billing", @"Login"};
static NSString *ChannelTypeStrings[] = {@"Merchant", @"eBayItem"};

#define LOCALE_CODE @"LocaleCode"

@implementation SetExpressCheckoutRequestDetails

InitAndDealloc

StringAccessor(ReturnURL)
StringAccessor(CancelURL)
StringAccessor1(cppHeaderImage, @"cpp-header-image")
StringAccessor1(cppHeaderBorderColor, @"cpp-header-border-color")
StringAccessor1(cppHeaderBackColor, @"cpp-header-back-color")
StringAccessor1(cppPayflowColor, @"cpp-payflow-color")
IntAccessor(AllowNote)
IntAccessor(ReqConfirmShipping)
TypedefAccessor(NoShipping, NoShippingType)
StringAccessor(Token)
AmountAccessor(MaxAmount)
StringAccessor(CallbackURL)
IntAccessor(CallbackTimeout)
GenericAccessor1(FlatRateShippingOptions, ShippingOptions)
IntAccessor(AddressOverride)
StringAccessor(PageStyle)
StringAccessor(BuyerEmail)
StringAccessor(giropaySuccessURL)
StringAccessor(giropayCancelURL)
StringAccessor(BanktxnPendingURL)
GenericAccessor(EnhancedCheckoutData)
GenericAccessor(BuyerDetails)
StringAccessor(BrandName)
GenericAccessor(FundingSourceDetails)
StringAccessor(CustomerServiceNumber)
IntAccessor(GiftMessageEnable)
IntAccessor(GiftReceiptEnable)
IntAccessor(GiftWrapEnable)
StringAccessor(GiftWrapName)
AmountAccessor(GiftWrapAmount)
IntAccessor(BuyerEmailOptinEnable)
StringAccessor(SurveyQuestion)
StringAccessor(CallbackVersion)
IntAccessor(SurveyEnable)
MutableArrayAccessor(PaymentDetails)
MutableArrayAccessor(BillingAgreementDetails)
MutableArrayAccessor1(OtherPaymentMethods, OtherPaymentMethodDetails)
MutableArrayAccessor1(SurveyChoice, NSString)
EnumAccessor(SolutionType, SolutionType)
EnumAccessor(LandingPage, LandingPageType);
EnumAccessor(ChannelType, ChannelType);

「InitAndDealloc」という行を削除すると、クラスで変数を設定できなくなったように見えます。確かに、私は作業中の(非ARC)ペイパルデモも持っています。

これを行うことによって:

SetExpressCheckoutRequestDetails *sreq = [[SetExpressCheckoutRequestDetails alloc] init];
sreq.ReturnURL = @"Bob";
NSLog(@"%@  ", sreq.ReturnURL );

両方のプロジェクトで。鉱山はnullを返し、ペイパルはボブを返します。

それは「InitAndDealloc」と関係がありますか、それとも私はそれを間違って見ていますか?ARCプロジェクトで「InitAndDealloc」を置き換えるにはどうすればよいですか?オートコンプリート付きの単純な「Init」が見つからないようです。「InitAndDealloc」をグーグルで検索しても、まったく結果が得られません:/

読んでくれてありがとう!

4

1 に答える 1

1

私はこれまでMECLを使用したことがありませんが、「InitAndDealloc」と呼ばれる方法は確かにObjective Cではないため、ARCがObjectiveCに要求するのと同じルールの対象にはなりません。またはそれと格闘します。

しかし、とにかく、公開されている可能性のある問題のあるSDKコードをARC対応にするのに苦労する代わりに、MECLファイルのARCをオフにしてみませんか?

これは、個々のファイルのARCをオフにする方法を説明する関連する質問です。

于 2012-06-17T22:10:25.493 に答える