Ошибка "окна" (сначала использовать в этой функции) в руководстве по iOS - PullRequest
2 голосов
/ 26 августа 2011

Я пробую учебное пособие по основным данным, и я скопировал код, указанный в этом учебном руководстве Apple по основным данным, здесь:

http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/iPhoneCoreData01/Articles/02_RootViewController.html

Он просит нас скомпилировать и запуститьреализация делегата приложения.Когда я делаю это, компилятор Xcode 4 выдает эту ошибку «окно необъявлено (первое использование в этой функции)».Я вижу, что есть окно, объявленное как свойство, и в коде есть строка синтеза, например:

@ synthesize window = _window;

, так что даже если объявлено свойство окнав программе, почему я получаю эту ошибку?

Вот файлы .h и .m:

.h: #import

@interface LocationsAppDelegate : NSObject <UIApplicationDelegate> {
    UINavigationController *navigationController;

}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) UINavigationController *navigationController;

@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;

- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;

@end

Теперь для.m файл:

#import "LocationsAppDelegate.h"
#import "RootViewController.h"

@implementation LocationsAppDelegate

@synthesize navigationController;

@synthesize window=_window;

@synthesize managedObjectContext=__managedObjectContext;

@synthesize managedObjectModel=__managedObjectModel;

@synthesize persistentStoreCoordinator=__persistentStoreCoordinator;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    RootViewController *rootViewController = [[RootViewController alloc] initWithStyle:UITableViewStylePlain];

    NSManagedObjectContext *context = [self managedObjectContext];
    if(!context) {
        //handle the error you dummy!!
    }

    rootViewController.managedObjectContext = context;


    UINavigationController *aNavigationController = [[UINavigationController alloc]initWithRootViewController:rootViewController];
    self.navigationController = aNavigationController;


    [self.window addSubview:[navigationController view]];
    [self.window makeKeyAndVisible];

     [rootViewController release];
 [aNavigationController release];


    return YES;
}


- (void)applicationWillTerminate:(UIApplication *)application
{
    [self saveContext];
}

- (void)dealloc
{
    [_window release];
    [__managedObjectContext release];
    [__managedObjectModel release];
    [__persistentStoreCoordinator release];
    [super dealloc];
}

- (void)saveContext
{
    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
    if (managedObjectContext != nil)
    {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
        {

            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        } 
    }
}

#pragma mark - Core Data stack

- (NSManagedObjectContext *)managedObjectContext
{
    if (__managedObjectContext != nil)
    {
        return __managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil)
    {
        __managedObjectContext = [[NSManagedObjectContext alloc] init];
        [__managedObjectContext setPersistentStoreCoordinator:coordinator];
    }
    return __managedObjectContext;
}

- (NSManagedObjectModel *)managedObjectModel
{
    if (__managedObjectModel != nil)
    {
        return __managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Locations" withExtension:@"momd"];
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];    
    return __managedObjectModel;
}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (__persistentStoreCoordinator != nil)
    {
        return __persistentStoreCoordinator;
    }

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Locations.sqlite"];

    NSError *error = nil;
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
    {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    

    return __persistentStoreCoordinator;
}

#pragma mark - Application's Documents directory

- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

@end

Ответы [ 2 ]

3 голосов
/ 26 августа 2011

Попробуйте использовать

self.window

вместо

window
0 голосов
/ 26 августа 2011

Просто чтобы немного расширить этот ответ:

Из оператора @synthesize видно, что окно свойств поддерживается переменной экземпляра _window. Таким образом, вы используете window для доступа к нему через getter (self.window или [self window]), но если вы пытаетесь получить доступ к переменной экземпляра напрямую, это будет _window.

...