1

socketscan SDK を目的の C iOS アプリと統合しようとしています。scanapisdk をダウンロードし、プロジェクトのメイン フォルダー内に scanapisdk のコピーを作成しました。ファイルとライブラリ参照を Xcode プロジェクトに追加しました。アプリをコンパイルしてビルドします。デバイスで実行します。次のコードは、数年間問題なく動作しています。

mファイルでグローバル変数として宣言された定数 NSString があります

NSString *const kSymbology = @"シンボル";

hファイルでexternとして宣言されています

extern NSString *const kSymbology;

次に、データベースクラスにこのコードフラグメントがあります

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
const char *Symbology = (const char*)sqlite3_column_text(statement, 0);
strSymbology = [NSString stringWithUTF8String:Symbology];

[dict setValue:strSymbology forKey:kSymbology];
[symbologies addObject:dict];
[dict release];

この行でコードがクラッシュします [dict setValue:strSymbology forKey:kSymbology];

[dict setValue:strSymbologyAlias forKey:@"Symbology"]; に変更すると、アプリはクラッシュしません。

私には意味がありません。エラーは別の場所にあり、偶然ここに表示されているようです。プロジェクトに追加した唯一の新しいものは、socketScan ファイルとライブラリへの参照です。SDK のどのメソッドも呼び出しません。ScanApiHelper.mm ファイルのすべてのメソッドをコメントアウトしたところ、アプリがクラッシュしなくなりました。ScanApiHelper.mm のいくつかのメソッドを元に戻し始めたところ、たとえば、SktClassFactory が言及されている行 ([SktClassFactory createScanObject] など) が有効な場合、アプリがクラッシュすることがわかりました。

それは、SDK のインストールに CocoaPods を使用しないことに関連していますか?

4

1 に答える 1

1

名前空間の衝突のようです。libScanApiCore.a には kSymbology という名前の変数があり、私のグローバル変数も kSymbology という名前です。変数名を ksymbology (小文字の s) に変更すると、アプリがクラッシュしなくなりました。

于 2017-04-04T01:02:42.603 に答える