1

我正在尝试将 socketscan SDK 与我的目标 C iOS 应用程序集成。我下载了scanapisdk,在我的项目主文件夹中制作了scanapisdk的副本。我将文件和库引用添加到 Xcode 项目。编译并构建应用程序。在设备上运行它。以下代码几年来一直没有问题。

我在 m 文件中有一个常量 NSString 声明为全局变量

NSString *const kSymbology = @"Symbology";

并在 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])处于活动状态时,应用程序就会崩溃。

这可能与不使用 CocoaPods 安装 sdk 有关吗?

4

1 回答 1

1

它看起来像名称空间冲突。libScanApiCore.a 有一个名为 kSymbology 的变量,而我的全局变量也名为 kSymbology。一旦我将变量名称更改为 ksymbology(小写 s),我的应用程序就不再崩溃。

于 2017-04-04T01:02:42.603 回答