次のメソッドを定義するプロトコルがあります。
- (MyObj * _Nonnull)initWithManagedObject:(NSManagedObject * _Nonnull)managedObject dataManager:(id<DataManagerProtocol> _Nonnull)dataManager;
それを実装するクラスには次のプロパティがあります。
@property (nonatomic, weak, readonly) id<DataManagerProtocol> dataManager;
メソッドの実装は次のようになります。
- (MyObj *)initWithManagedObject:(NSManagedObject *)object dataManager:(id<RHDataManagerProtocol>)dataManager
{
// TEST
self = [super init];
if (self) {
// Both the following lines cause the warning.
// Changing nullability has no effect.
self.dataManager = dataManager;
//_dataManager = dataManager;
}
return self;
}
これは正確な警告です:
互換性のない型 '__strong id _Nonnull' から 'id _Nullable' に割り当てています
nullability を変更しても何も起こりません。
編集: .m ファイルに次のクラス拡張子があります。
@interface MyObj ()
@property (nonatomic, weak) id<DataManagerProtcol> dataManager;
@end