我确信这对于比我有更客观的 C 经验的人来说会很容易。我没有写这个,但我一直在使用它。
我有一个 .h 文件:带有接口的 bleconfigLibrary:
@interface bleconfigLibrary : NSObject.
在另一个 .m 文件中,我有:
#import <Foundation/Foundation.h>
#import "BTCommands.h"
#import "bleconfigLibrary.h"
#define MAX_BUF_SIZE (512)
@implementation BTCommands
bleconfigLibrary *handleRequest;
+ (void)initialize{
handleRequest = [bleconfigLibrary alloc];
}
问题似乎是:
handleRequest = [bleconfigLibrary alloc];
当我尝试在模拟器上运行时,出现错误:
Undefined symbol: _OBJC_CLASS_$_bleconfigLibrary
但它在物理设备上运行良好。如果我注释掉该部分,它就会在模拟器上运行。 任何帮助将不胜感激。
您已经为
@interface
定义了 bleconfigLibrary
,但在此处显示的代码中尚未为其定义 @implementation
。事实上它适用于物理设备但不适用于模拟器,这表明您正在链接一个定义实现的库,但该库不是为模拟器构建的。 (可能它是一个老式的“胖”库,不是为 Apple Silicon 构建的。)该库需要重建为 xcframework。 (虽然链接页面讨论了 Swift,但 xcframeworks 也适用于 ObjC。)
但请注意,BLE 功能通常在模拟器中不起作用,因此您可能更愿意不为模拟器构建此代码。
此行不正确:
handleRequest = [bleconfigLibrary alloc];
分配内存,但不初始化对象。虽然它可能“有效”(例如,如果对象碰巧不需要初始化),但这里正确的行是:
handleRequest = [bleconfigLibrary new];
或等价:
handleRequest = [[bleconfigLibrary alloc] init];
顺便说一句,ObjC 类应该以大写字母开头(尽管这不是强制性的)。
(我假设您的
.
定义末尾的 @interface
是您问题中的拼写错误,因为它无法在 ObjC 中编译。)