Bu kod Xcode 6.2 ve 6.3 arasında değişiklik yoktu, ama şimdi [self alloc]
içeren hat hata neden olur:yeni Xcode 6.3/iOS 8.3: kolaylık yapıcı nedenler için kullanarak kendi kendine alloc inşa hata
Multiple methods named 'initWithType:' found with mismatched result, parameter type or attributes
@implementation AGNetworkDataRequest
+ (instancetype)networkDataRequestWithType:(AGNetworkDataRequestType)type
{
AGNetworkDataRequest *r = [[self alloc] initWithType:type];//error here
return r;
}
- (id)initWithType:(AGNetworkDataRequestType)type
{
//typical init code
}
//...
Eğer Cmd + initWithType:
aramasını tıklatırsam, projemde hiç atıfta bulunulmamış bir nesne olan CAEmitterBehavior
çatışmasını gösterdim, ancak iOS 8.3'te yeni olması gerektiğini tahmin ediyorum.
[self alloc]
- [AGNetworkRequest alloc]
'u değiştirirseniz, bu yöntemi devralan alt sınıflar, yalnızca bu nesneyi nasıl tasarladığımıza karşılık gelen ana nesneyi döndürür.
Yöntem adını değiştirmeden çakışmayı ortadan kaldırmanın herhangi bir yolu (uygulama boyunca tüm yöntem çağrılarını değiştirmeyi gerektirir)? Tahsis iadenizi
'initWithType:' yönteminiz 'id 'değil' instancetype' döndürmelidir. 'Init ... 'yöntemlerinin hepsinin' instancetype' ile bildirildiğinden emin olun. – rmaddy
@rmaddy Apple API'leri, kolaylık sağlayan kurucular için 'in' ve 'instancetype' için 'id' şablonunu izliyor görünmektedir. Apple'ın tüm init 'in instancetype olması gerektiğini belirten bir bağlantınız var mı? – ray
Herhangi bir 'init ... 'yöntemi için dokümanlar bakın ve' instancetype'ı döndürdüğünü görün. Örneğin: "UITableView initWithFrame: style:" veya "NSArray init". Init ... 'yöntemleri için tüm id türlerinin dönüş türleri, bazı iOS güncellemelerinde Apple tarafından" instancetype "olarak değiştirildi (hangisini unuturum). – rmaddy