2010-11-10 13 views
7

Nel mio AppDelegate.m, nel metodo application: didFinishLaunchingWithOptions:, ho messo la seguente riga:Dove posso ottenere un contesto dell'oggetto gestito?

NSManagedObjectContext *context = [self managedObjectContext]; 

ma dice: AppDelegate potrebbe non rispondere a managedObjectContext. Ho visto questo in un tutorial online, cosa sto sbagliando? Ho inserito #import <CoreData/CoreData.h> nel mio file App_Prefix.pch (vedere Adding Core Data to existing iPhone project) ma ciò non ha aiutato.

L'obiettivo è quindi impostare myViewController.context = context e quindi utilizzare tale contesto per recuperare alcuni dati nel controller di visualizzazione.

EDIT: Si prega di vedere il mio commento alla risposta di O. Begemann.

risposta

11

Creare un'app campione vuota e assicurarsi di selezionare la casella di controllo Dati principali. Quindi guarda il codice di riferimento per i dati principali che sono stati generati nel delegato dell'applicazione. Hai bisogno di pezzi di codice corrispondenti nella tua app.

+0

Ah, grazie! Ci proverò. –

+1

Ora sto ottenendo un'eccezione: '*** Terminazione dell'app a causa dell'eccezione non rilevata 'NSInvalidArgumentException', motivo: '*** - [NSURL initFileURLWithPath:]: nil string parameter'', alla riga:' NSURL * storeURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @ "InfoWeek.sqlite"]] '. Ho controllato in applicationDocumentsDirectory; per l'app di esempio c'è un file Untitled.sqlite, ma il mio è vuoto. Cosa dovrei fare? –

+0

OK, risolto, in realtà era una linea diversa che rappresentava il problema e avevo bisogno di cambiare 'ofType: @" momd "' a "mom". –

0

Avete un metodo con la firma -(NSManagedObjectContext *) managedObjectContext; o un @property(...) NSManagedObjectContext *managedObjectContext; nel vostro AppDelegate.h?

1

È probabile che il tutorial che stai guardando abbia utilizzato un modello di progetto iPhone che includeva i dati principali. Quando crei un nuovo progetto, la maggior parte dei modelli ha un'opzione di casella di controllo su "Utilizza i dati principali per l'archiviazione". La selezione di questa opzione crea tre metodi nel delegato dell'app per recuperare un oggetto ManagedObjectContext, managedObjectModel e persistentStoreCoordinator. Dovresti accedere a questi metodi usando [autogestitoObjectContext] ecc., Come nel tutorial che menzioni.

0

Tim,

Grazie mille per il suggerimento. Dopo aver creato questa app boilerplate ho capito che XCode genera del codice aggiuntivo nel delegato dell'app SE si seleziona l'opzione CoreData. Non riuscivo a capire perché la guida di sviluppo di Apple avesse un processo multi-step relativamente lungo per inizializzare lo stack di dati di base e la maggior parte degli esempi si riferisce solo a questa proprietà (non esistente di default!). Si scopre che tutti questi esempi presumono che l'applicazione sia stata creata in un certo modo.

1

Se si decide di aggiungere dati di base a un progetto esistente e non si è deselezionata la casella menzionata nel tutorial, è necessario aggiungere le proprietà nel file di intestazione di appdelegate e anche questo pezzo importante nel prefix.pch

#import <Availability.h> 

#ifndef __IPHONE_3_0 
#warning "This project uses features only available in iOS SDK 3.0 and later." 
#endif 

#ifdef __OBJC__ 
    #import <UIKit/UIKit.h> 
    #import <Foundation/Foundation.h> 
    #import <CoreData/CoreData.h> 
#endif 
Problemi correlati