Tôi đang sử dụng kiến trúc MVC cho ứng dụng GUI. Lớp mô hình có một số hàm C. Một trong các hàm C gọi một số phương thức của lớp Objective-C. Tôi gọi những phương thức đó bằng cách sử dụng một đối tượng của lớp đó. Điều kỳ lạ xảy ra là các phương thức trước đó với phương thức xyz được gọi là hoàn hảo nhưng khi phương thức xyz đó được gọi, phương thức đó và các phương thức sau khi nó không được thực thi. Tôi không gặp bất kỳ lỗi nào. Vì vậy, không thể tìm ra chính xác những gì đang xảy ra. Bất kỳ ý tưởng nào về những gì có thể là lý do cho điều này?Không thể gọi phương thức C mục tiêu từ hàm C
Trả lời
Bạn chắc chắn có thể chạy các phương thức trên các đối tượng Obj-C từ một hàm C, vì vậy có thể có lỗi trong mã của bạn tại một số điểm. Nếu tôi phải đoán, có vẻ như một vật thể không phải là nil khi bạn không mong đợi nó. Thông thường bạn sẽ bắt đầu bằng cách thiết lập các điểm ngắt trong hàm của bạn, vì vậy bạn có thể tìm hiểu trạng thái của các đối tượng được đề cập đến.
Như Marc chỉ ra, bạn có thể sử dụng tham chiếu đến đối tượng OBJC không được khởi tạo bên ngoài phạm vi mục tiêu-c.
Dưới đây là một mẫu làm việc mã C gọi phương thức một đối tượng của ObjC:
#import <Cocoa/Cocoa.h>
id refToSelf;
@interface SomeClass: NSObject
@end
@implementation SomeClass
- (void) doNothing
{
NSLog(@"Doing nothing");
}
@end
int otherCfunction()
{
[refToSelf doNothing];
}
int main()
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
SomeClass * t = [[SomeClass alloc] init];
refToSelf = t;
otherCfunction();
[pool release];
}
dude, bạn đá. Tôi lãng phí một ngày tốt đẹp về điều này và mã của bạn chỉ được cứu vãn một ngày khốc liệt khác. Tôi ước tôi có thể upvote bạn 100 lần nữa. – eviljack
Một 100 upvotes khác từ tôi! Điều này cực kỳ hữu ích. – willc2
BTW điều này sẽ chỉ làm việc cho một singleton. Nếu bạn khởi tạo nhiều hơn một đối tượng mà con trỏ refToSelf sẽ chỉ trỏ đến đối tượng cuối cùng. – Brian
Breakpoint vào phương pháp trước khi xyz, và sau đó bắt đầu bước duy nhất trong chương trình gỡ rối. Tuyệt vời của nó bao nhiêu lỗi bạn có thể phát hiện bằng cách đơn bước qua mã trong trình gỡ lỗi. Trên thực tế, đây thực sự là kỹ thuật tránh lỗi được đề xuất để luôn thực hiện một bước thông qua mã cho bất kỳ mã mới nào mà bạn viết.
Tôi đồng ý với Marc, nguyên nhân cổ điển của "phương pháp đó và các phương pháp sau khi nó không được thực hiện" là tham chiếu đối tượng là không, vì [doilAnything] sẽ không làm gì và không báo cáo lỗi.
Có một cách đơn giản để làm điều này:
@implementation
// Define a object
ClassName *thisClass;
và sau đó init với tự
thisClass = self;
Bạn có thể sử dụng bất kỳ var và phương pháp trong C-Phương pháp
- 1. Làm thế nào để gọi một phương thức từ phương thức khác trong Mục tiêu C?
- 2. Phương thức gọi trên lớp con từ phương thức lớp cha (Mục tiêu-c 2.0)
- 3. Mục tiêu-C - Mẫu phương thức mẫu?
- 4. Cách Lên lịch Gọi phương thức trong Mục tiêu C
- 5. Gọi Python từ mục tiêu-C
- 6. Gọi phương thức động trong mục tiêu-C
- 7. Gọi phương thức C từ mã C++/Java/C#?
- 8. Phương thức tĩnh không trạng thái so với hàm C trong Mục tiêu-C
- 9. Làm thế nào để gọi một Phương pháp Mục tiêu-C từ Phương pháp C?
- 10. Liệu có bị cấm gọi hàm C cổ điển từ cơ thể phương thức lớp Objective-C++ không?
- 11. Gọi phương thức C++ từ webviews Javascript
- 12. Gọi phương thức python từ C++ (hoặc C) gọi lại
- 13. Con trỏ hàm trong mục tiêu C
- 14. Phương thức thể hiện cuộc gọi từ một hàm tạo trong C#
- 15. Ai sẽ gọi phương pháp chính trong mục tiêu c
- 16. Gọi phương thức C# BHO từ Javascript
- 17. Gọi chức năng C Mục tiêu từ Mã C++
- 18. Làm thế nào tôi có thể gọi một phương thức trong Mục tiêu-C?
- 19. Làm cách nào để gọi một hàm mục tiêu C?
- 20. Phương pháp gọi C mục tiêu động với một chuỗi
- 21. Gọi C++ con trỏ hàm từ C#
- 22. Gọi phương thức C++ từ QML (Qt Quick application)
- 23. Phương thức truyền dẫn mục tiêu-C làm tham số
- 24. Cú pháp để gọi một phương thức trong Mục tiêu C?
- 25. khác biệt c mục tiêu giữa các hàm và phương thức
- 26. Cách gọi hàm C++ từ C?
- 27. Mục tiêu c init trong giao thức
- 28. Gọi hàm C++ exe từ C#
- 29. Bạn có thể gọi hàm C# từ JavaScript không?
- 30. Có thể gọi hàm C++ từ JavaScript trong QWebView không?
Bạn có thể gửi một số mã ? Nếu không nó sẽ không thể giúp được. –
Tôi yêu cầu thứ hai. Một số mã đơn giản sẽ rất hữu ích. Ví dụ. chỉ là một số mã của hàm C cho thấy cách bạn thực sự truy cập đối tượng obj-c và cách bạn thực hiện cuộc gọi đến nó có thể rất hữu ích – Mecki