2017-07-30 16 views
3

私は疑問を持っているが、この機能に:Pascalで(NSString *)これはポインタまたはNSStringのパスカルですか?

- (instancetype)initWithCenter:(CLLocationCoordinate2D)center 
          radius:(CLLocationDistance)radius 
         identifier:(NSString *)identifier; 

identifier:(NSString *)identifierポインターまたはNSStringのとして変換されなければならないのでしょうか?

Delphiソースコードで、この関数は次のように変換される:私はそれを使用するとき

function initWithCenter(center: CLLocationCoordinate2D; radius: CLLocationDistance; identifier: NSSTRING): Pointer; cdecl; 

は、しかし、私は、IOS 10の下AVを有する(それは、IOS 9の作業'S) :(

私はポインタでNSStringのを交換する場合、それは、IOS 10上の作業だが、私は理由を理解していない...

NOTEは:それは非常に奇妙だが理由でデルファイのすべて(NSString *)NSStringと翻訳されており、CLRegion.initCircularRegionWithCenter(ios10/64bit以下)以外は正常に動作しています。なぜそれが本当に知りたいのですか? https://quality.embarcadero.com/browse/RSP-15717http://delphiworlds.com/2016/07/region-monitoring-background-ios/

+0

私はiOS 9デバイスをもう使用していませんが、iOS 9(64ビット)では動作しませんでした。また、2016年7月に問題があったので、iOS 9.3、2016年3月に9.3がリリースされました。 –

+0

hmmなので、おそらくコンパイラに接続されていますか?私は32ビット私の下で64ビットではない –

+0

はいそれはコンパイラ(64ビット)に接続されていますhoracioの答えを参照してください –

答えて

6

それは32ビットのサポート、が正しいCLRegionのヘッダ変換のために正常に動作して、Objective-Cのブリッジの問題です。問題は、ブリッジが64ビットサポートで正しく機能していないことです。Objective-CランタイムABIは、32ビットと64ビットのサポートが異なります。明確にするために、正しい使用法はNSString :)です。ブリッジはハンドル(Objective-Cランタイムによって作成されたオブジェクトへのポインタ)の抽出を処理します。

Handle := (DelphiObject as ILocalObject).GetObjectID 

またはMacapi.Helpers.pasから以下の機能を呼び出す:デイブNottageから

function NSObjectToID(const AObject: NSObject): Pointer; 

提案をObjective-Cのランタイムは、現在の設計では、ハンドル抽出はによって行われますあなたが現在ブリッジの作業をバイパスしているので動作しますハンドルを抽出して直接渡しています。それはまさにその橋が仕事で失敗しているところです。私たちは低レベルに行く必要はありませんポインタここでは、私たちの橋のために、Objective-Cのに相当するデルファイNSString *NSStringインターフェイスです。

詳しくは、(https://quality.embarcadero.com/browse/RSP-15717)をご覧ください。ありがとうございました:)

+2

おかげさまでHoracio! –

+0

気に入ってよかった、@Jack:D –

+0

ヒントありがとう、@DalijaPrasnikar –

関連する問題