我正在开发Objective-C / OSX中的应用程序(第一次尝试)。我有一个struct(NSDevice自定义类型),需要作为public / extern变量访问,以允许类的不同接口访问它。
这是标题中的声明。
wonderlandwonderland
********* *
******** **
******** * *
** ** ******
*** * ******
以及我如何在源文件中实现它
9624
当尝试在init接口中初始化struct时,我得到了一个EXC_BAD_ACCESS。有什么想法吗?
我可以使用" struct"或者在Objective-C中有更好的方法吗?
THX
答案 0 :(得分:0)
Seb,您需要为Device
分配空间。
尝试这样做:
- (id)init{
self = [super init];
if(self){
NSLog(@"Init");
LIBMTP_Init();
Device = malloc(sizeof(NSDevice));
Device->device = NULL;
Device->numusbrawdevice = 0;
Device->rawdeviceID = 0;
Device->usbrawdevice = NULL;
}
return self;
}
并声明你的结构:
typedef struct {
LIBMTP_raw_device_t * usbrawdevice;
int numusbrawdevice;
uint32_t rawdeviceID;
LIBMTP_mtpdevice_t *device;
} NSDevice;
另外,我 强烈推荐 将NSDevice
的名称更改为SebDevice
或者不以{{1}开头的内容因为这些前缀字符通常表示MacOS SDK内置的内容,并且在您离开项目后,它会混淆任何必须查看代码的人。
最后一件事,像这样的全球变量不应该以大写字母开头。在Objective-C中,最佳实践是变量以小写字母开头,或者可能是NS
(对于全局)或下划线。将g
更改为Device
。