Tôi có một phương thức trong lớp mục tiêu-C. Nó có 2 hàm gọi lại được viết bằng C. Con trỏ lớp tức là self
được chuyển đến các hàm này là void *
. Trong các hàm C, tôi tạo một con trỏ của lớp kiểu và gán tham số void *
. Hàm gọi lại đầu tiên thực thi thành công. Nhưng con trỏ void *
trở thành nil
trong hàm gọi lại thứ 2. Lưu ý rằng tôi đã không tinh chỉnh con trỏ trong lần gọi lại đầu tiên nhưng tôi vẫn nhận được nil
trong lần gọi lại thứ hai.Xử lý cuộc gọi lại
Bất kỳ ý tưởng nào có thể xảy ra sai?
Ví dụ:
kr = IOServiceAddMatchingNotification(gNotifyPort, kIOFirstMatchNotification,
matchingDict, RawDeviceAdded, NULL,
&gRawAddedIter);
RawDeviceAdded(NULL, gRawAddedIter, self);
này hoạt động tốt. Nhưng chức năng bên dưới nhận được self
là nil
.
kr = IOServiceAddMatchingNotification(gNotifyPort, kIOFirstMatchNotification,
matchingDict, BulkTestDeviceAdded, NULL,
&gBulkTestAddedIter);
BulkTestDeviceAdded(NULL, gBulkTestAddedIter, self);
Sẽ dễ dàng hơn nếu bạn có thể chỉnh sửa để thêm mã hiển thị những gì bạn đang cố gắng làm. –