#ios #objective-c #uiviewcontroller
#iOS #objective-c #uiviewcontroller
Вопрос:
В Objective C у меня есть ядро Data managedObjectContext, реализованное следующим образом:
//MyViewController1.h
@interface MyViewController1 : UIViewController
{
NSManagedObjectContext *_managedObjectContext;
}
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
//MyViewController.m
@implementation MyViewController1
@synthesize managedObjectContext = _managedObjectContext;
- (NSManagedObjectContext *) managedObjectContext
{
...
}
(Да, я знаю, что мой код ужасно устарел, это старый проект).
Я хочу передать это managedObjectContext
в качестве параметра другому UIViewController
, чтобы он мог удерживать managedObjectContext
. Как мне объявить свойство? В настоящее время в MyViewController2
, я объявил его так же, как в MyViewController1
:
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
Но когда я делаю self.managedObjectContext = managedObjectContextParameter
это в конструкторе MyViewController2.m
, компилятор не позволяет мне присваивать, потому что он доступен только для чтения.
Каков наилучший способ сделать это? Должен ли я просто сделать это без readonly или иметь какую-то слабую ссылку? Я теряюсь в таких вещах.
Комментарии:
1. Удаление
readonly
кажется очевидным выбором. Зачем вы его добавили, если вам нужно, чтобы свойство было доступно для записи?2. @rmaddy Я полагаю, что это было из кода boiler plate от Apple давным-давно. Могу ли я сделать свойство доступным только для чтения в viewController1, а свойство, которому оно передается в ViewController2, доступным для чтения? Это работает с компилятором, но не уверен, имеет ли это смысл с точки зрения дизайна. Но да, в конечном итоге может просто не заставить их читать только так, как вы говорите.