【发布时间】:2015-07-25 01:16:00
【问题描述】:
我正在使用 Objective-C/OSX 开发一个应用程序(第一次尝试)。我有一个结构(NSDevice 自定义类型),需要作为公共/外部变量访问,以允许类的不同接口访问它。
这是标题中的声明。
struct NSDevice{
LIBMTP_raw_device_t * usbrawdevice;
int numusbrawdevice;
uint32_t rawdeviceID;
LIBMTP_mtpdevice_t *device;
};
extern struct NSDevice *Device;
@interface DeviceManager : NSObject
- (void) openDevice;
- (void) closeDevice;
@end
以及我如何在源文件中实现它
#import "DeviceManager.h"
struct NSDevice *Device = NULL;
@implementation DeviceManager
- (id)init{
self = [super init];
if(self){
NSLog(@"Init");
LIBMTP_Init();
Device->device = NULL;
Device->numusbrawdevice = 0;
Device->rawdeviceID = 0;
Device->usbrawdevice = NULL;
}
return self;
}
- (NSMtp_error) openDevice {
LIBMTP_error_number_t error = LIBMTP_ERROR_GENERAL;
NSLog(@"Opening Device");
error = LIBMTP_Detect_Raw_Devices(&Device->usbrawdevice, &Device->numusbrawdevice);
当尝试在 init 接口中初始化结构时,我得到了一个 EXC_BAD_ACCESS。有什么想法吗?
我可以使用“结构”还是在 Objective-C 中有更好的方法?
谢谢
【问题讨论】:
-
您声明了一个名为
* Device的指针,但我没有看到您为其创建指向的结构的任何地方。 -
抱歉复制粘贴错误...
-
我仍然没有看到任何
Device = ...类型的逻辑。 -
@Philip... 我应该很累,但没有抓住重点。执行 struct NSDevice *Device = NULL; 时,设备在源文件顶部初始化
-
没错。它是 NULL,这意味着它没有指向实际的初始化结构。所以当你说
Device->device = NULL;时,实际上就像输入 NULL->device = NULL;.
标签: objective-c macos