Получение ошибки при вызове метода в AppDelegate от действия кнопки. - PullRequest
0 голосов
/ 18 января 2012

Когда я нажимаю «сохранить», я получаю сообщение об ошибке при ответе на AppDelegate.

Я уверен, что мне здесь не хватает чего-то небольшого, но если у кого-то есть быстрый ответ, это будет очень признательно.

Вот ошибка, которую я получаю:

-[AppDelegate saveNewUsername:username:]: unrecognized selector sent to instance 0x8e403d0

Вот мое действие кнопки:

-(IBAction)saveButtonPressed:(id)sender
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

NSString *userid = [appDelegate retrieveFromUserDefaults:@"userid"];
NSMutableArray *currentUser = [appDelegate getUserInfo:userid];
NSString *currentUsername = [currentUser objectAtIndex:0];

NSLog(@"%@", userid);

if ([currUsername.text isEqualToString:currentUsername]) {
    //here we'll check and make sure the new username is valid and doesn't already exist (for now just update local DB)
    if ([theNewUsername.text isEqualToString:@""]) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"You must enter something for your new username." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
    } else {
        int returnVal = [appDelegate saveNewUsername:userid username:theNewUsername.text];
        if (returnVal == 1) {
            [self dismissModalViewControllerAnimated:YES];
        } else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"There was an error saving to the database." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alert show];
        }
    }
} else {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"The username you entered is not your current username." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];
}
}

А вот мой метод AppDelegate:

-(int)saveNewUsername:(NSString *)user_id username:(NSString *)username
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"somedbname.sqlite3"];

FMDatabase *db = [FMDatabase databaseWithPath:writableDBPath];

if (![db open]) {
    NSLog(@"Could not open db.");
    return 0;
} else {
    [db intForQuery:@"UPDATE user SET username=? WHERE user_id=?", username, user_id];

    if ([db hadError]) {
        NSLog(@"Error %d: %@", [db lastErrorCode], [db lastErrorMessage]);
        return 0;
    } else {
        return 1;
    }
}
}

1 Ответ

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

Ваш код выглядит нормально. Поэтому я думаю, что appDelegate на самом деле не является экземпляром AppDelegate.

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

Установите точку останова и посмотрите в отладчике, чтобы проверить, действительно ли это экземпляр AppDelegate.

...