Tôi có một phương pháp init mà phải mất một (id) lập luận:Tại sao tôi cần truyền tự id?
-(id) initWithObject:(id) obj;
Tôi đang cố gắng để gọi nó như thế này:
[[MyClass alloc] initWithObject:self];
Nhưng XCode được phàn nàn về tranh luận là một "biệt Loại mục tiêu-C "(thường chỉ ra một loại không phù hợp hoặc mức độ lỗi gián tiếp).
Nếu tôi tự chuyển mình thành (id) cảnh báo sẽ biến mất. Trong cả hai trường hợp, mã chạy như mong đợi. Điều thú vị là, trên dòng tiếp theo, tôi sẽ tự chuyển sang phương thức khác cũng có id và hoạt động tốt.
Tôi tự hỏi liệu tôi có thiếu điều gì đó tinh tế - hay nó là một đặc tính của trình biên dịch?
Tôi không hoàn toàn thoải mái khi chỉ truyền cho đến khi tôi chắc chắn về lý do tại sao cần thiết.
[Chỉnh sửa]
Tôi đã được yêu cầu cung cấp thêm mã. Không chắc có nhiều thứ khác có liên quan. Đây là mã thực tế của tôi mà thực hiện cuộc gọi. Lưu ý rằng chính nó, trong một phương thức init. Đó là lời kêu gọi initWithSource
đó là đưa ra các cảnh báo:
-(id) initWithFrame:(CGRect) frame
{
self = [super initWithFrame: frame];
if(self)
{
delegate = nil;
touchDelegate = [[TBCTouchDelegate alloc] initWithSource:self];
[touchDelegate.viewWasTappedEvent addTarget: self action:@selector(viewWasTapped:)];
}
return self;
}
Và đây là phương pháp init được gọi là:
-(id) initWithSource:(id) sourceObject
{
self = [super init];
if (self != nil)
{
// Uninteresting initialisation snipped
}
return self;
}
Bạn có thể muốn đăng thêm mã tại đây; không có gì nhảy ra ngoài, nhưng chỉ có hai dòng để làm việc với, thật khó để nói. –
Đồng ý với Ben, nhưng một điều cần xem xét, là phương thức initWithObject được khai báo? –
Cảm ơn bạn đã tìm kiếm. Tôi đã thêm một chút mã trên, cho những gì nó có giá trị. @ Jason: Có, initWithSource (tên phương thức thực tế của tôi) được khai báo trong tiêu đề và chắc chắn khớp với tiêu đề. – philsquared