Изменение Root View Controller на Tab View Controller в основном приложении данных (Xcode4) - PullRequest
0 голосов
/ 29 марта 2012

Я новичок в создании приложений для iPhone с основными данными.Я создал новый проект данных ядра в XCode и попытался добавить контроллер панели вкладок в качестве корневого контроллера представления, затем поместил контроллер табличного представления по умолчанию после контроллера навигации в этой иерархии:

-> Контроллер панели вкладок -> НавигацияКонтроллер -> Контроллер TableView -> Контроллер TableView2 -> Контроллер деталей

Ранее я уже реализовывал приложение, используя контроллеры навигации и панели вкладок, однако для этого приложения мне нужен доступ к managedObjectModel во всем приложении.

Я пытался возиться с делегатом приложения, таким как didFinishLaunchingWithOptions и т. Д. Я всегда получаю сообщения, похожие на '

' Завершение работы приложения из-за необработанного исключения 'NSInvalidArgumentException',

причина: '- [UITabBarController topViewController]: нераспознанный селектор отправлен в экземпляр'

Это код, который я использую для доступа к ManagedObjectContext:

AppDelegate *appDelegate = 
[[UIApplication sharedApplication] delegate];

NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *newCoffee;
newCoffee = [NSEntityDescription
              insertNewObjectForEntityForName:@"Coffee"
              inManagedObjectContext:context];

ИЯ получаю эту ошибку:

Нет видимого @interface для 'AppDelegate', объявляет селектор 'managedObjectContext'

Я только что заметил, что XCode говорит, что это проблема с ARC, как мне получить доступ к моду с включенным ARC?

Ответы [ 3 ]

3 голосов
/ 29 марта 2012

Хорошо, если я правильно понимаю ваш вопрос, вы хотите получить доступ к NSManagedObjectModel, чтобы вы могли получить доступ к вашим сохраненным данным.Я прав?

Ну, во-первых, вы должны импортировать ваш Appdelegate в viewController, где вам нужно сохранить или загрузить данные.

Во-вторых, вы должны реализовать это в вашем viewDidLoad:

    self.context = [self context];

    if (self.context == nil) 
    { 
        self.context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    }

с контекстом @property (nonatomic, retain) NSManagedObjectContext *, в файле заголовка.

0 голосов
/ 29 марта 2012

Говоря об управляемой объектной модели, вы имеете в виду управляемый объектный контекст - верно?

В обоих случаях: вы можете получить доступ к контексту и модели в любое время через делегата объекта общего приложения, например:

[(YourAppDelegateClass *)[UIApplication sharedApplication] managedObjectContext]

Но вы также можете просто создать свойство для каждого контроллера представления и передать контекст по иерархии.

0 голосов
/ 29 марта 2012

Я предлагаю вам передать контекст управляемого объекта от контроллера к контроллеру. Также, если вы инициализируете некоторый контроллер представления управляемым объектом, вы можете получить доступ к MOC через свойство managedObjectContext этого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...