Почему моя программа не входит в метод viewDidLoad? - PullRequest
0 голосов
/ 20 августа 2011

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

Приложение было создано как оконное приложение, а затем я добавил в него viewController.Владелец файла является подклассом пользовательского класса viewController, который я создал.

Когда я его выполняю, UIView создает пустое представление без текстовых полей или надписей, которые я создал в этом представлении.

Я ставлю точку останова в основном методе, она даже не уходит оттуда, когда я нажимаю кнопку перехода в метод.Когда я ставлю точку останова на метод viewDidLoad, он даже не доходит до него.

Наконец, я не получаю никаких ошибок на консоли.Что происходит?

Вот класс viewController:

#import "PersistenceViewController.h"
#import "CoreDataPersistenceAppDelegate.h"

@implementation PersistenceViewController


@synthesize line1;
@synthesize line2;
@synthesize line3;
@synthesize line4;


#pragma mark - View lifecycle

- (void)viewDidLoad
{
    CoreDataPersistenceAppDelegate *appDelegate = [[UIApplication sharedApplication]                delegate];
    NSManagedObjectContext *context = [appDelegate managedObjectContext];
    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Line" inManagedObjectContext:context];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entityDescription];

    NSError *error;
    NSArray *objects = [context executeFetchRequest:request error:&error];
    if (objects == nil) {
        NSLog(@"There was an error");
    }

    for (NSManagedObject *oneObject in objects) {
        NSNumber *lineNum = [oneObject valueForKey:@"lineNum"];
        NSString *lineText = [oneObject valueForKey:@"lineText"];

        NSString *fieldName = [NSString stringWithFormat:@"line%d", [lineNum integerValue]];
        UITextField *theField = [self valueForKey:fieldName];
        theField.text = lineText;
    }
    [request release];

    UIApplication *app = [UIApplication sharedApplication];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:app];

    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

    -(void) applicationWillResignActive:(NSNotification *)notification {
        CoreDataPersistenceAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
        NSManagedObjectContext *context = [appDelegate managedObjectContext];
        NSError *error;

        for (int i=1; i<=4; i++) {
        NSString *fieldName = [NSString stringWithFormat:@"line%d",i];
        UITextField *theField = [self valueForKey:fieldName];

        NSFetchRequest *request = [[NSFetchRequest alloc]init];

        NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Line" inManagedObjectContext:context];
        [request setEntity:entityDescription];
        NSPredicate *pred = [NSPredicate predicateWithFormat:@"(lineNum = %d)", i];
        [request setPredicate:pred];

        NSManagedObject *theLine = nil;

        NSArray *objects = [context executeFetchRequest:request error:&error];

        if (objects == nil) {
            NSLog(@"There was an error");
        }
        if ([objects count] > 0) 
            theLine = [objects objectAtIndex:0];
        else
            theLine = [NSEntityDescription insertNewObjectForEntityForName:@"Line" inManagedObjectContext:context];

        [theLine setValue:[NSNumber numberWithInt:i] forKey:@"lineNum"];
        [theLine setValue:theField.text forKey:@"lineText"];

        [request release];
    }
    [context save:&error];
}

- (void)viewDidUnload
{
    self.line1 = nil;
    self.line2 = nil;
    self.line3 = nil;
    self.line4 = nil;

    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)dealloc
{
    [line1 release];
    [line2 release];
    [line1 release];
    [line1 release];

    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}


@end    

1 Ответ

1 голос
/ 03 января 2012

Обязательно измените viewcontroller, который инициализируется в приложении, с правильным пером.Пустой UIView, вероятно, является видом, созданным при запуске проекта.

В вашем AppDelegate есть метод с именем applicationdidFinishLaunchingWithOptions, в котором находится нечто вроде следующего кода:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[RIViewController alloc] initWithNibName:@"RIViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

ВВ моем случае я загружаю RIViewController.По умолчанию файл пера имеет то же имя, что и контроллер, и поэтому называется также RIViewController.

...