Необычная ошибка в приложении iPhone - PullRequest
1 голос
/ 11 июля 2009

В моем приложении hello world у меня есть кнопка и текстовое поле. Вы вводите свое имя в текстовое поле, затем нажимаете кнопку, после чего вы должны увидеть «Здравствуйте, [имя]!». Однако все, что я получаю, это "Привет, мир!" (по умолчанию, когда в текстовом поле нет строки), даже когда я ввожу имя. По запросу вот файл:

//
//  MyViewController.m
//  HelloWorld
//
//  Created by RCIX on 7/10/09.
//  Copyright 2009 __MyCompanyName__. All rights reserved.
//

#import "MyViewController.h"

@implementation MyViewController

@synthesize textField;
@synthesize label;
@synthesize string;

/*
 // The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Custom initialization
    }
    return self;
}
*/
/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
}
*/
/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/
- (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.
}
- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)dealloc {
    [textField release];
    [label release];
    [string release];
    [super dealloc];
}
- (IBAction)changeGreeting:(id)sender {
    self.string = textField.text;
    NSString *nameString = self.string;
    if ([nameString length] == 0) {
        nameString = @"World";
    }
    NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@!", nameString];
    label.text = greeting;
    [greeting release];
}

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
        [theTextField resignFirstResponder];
    return YES;
}

@end

Ответы [ 3 ]

1 голос
/ 11 июля 2009

Нет необходимости указывать nameString = string, просто работайте с [self string] напрямую!

Вот рабочий пример:

string = textField.text;
if ([string length] == 0) {
    string = @"World";
}

NSString *greeting = [NSString stringWithFormat:@"Hello, %@!", string];
[label setStringValue:greeting];

Вы увидите, что я изменил initWithFormat на stringWithFormat. Если вы используете stringWithFormat, объект NSString автоматически освобождается, поэтому нам не нужно беспокоиться о его освобождении.

И последнее. Я не вижу необходимости в том, чтобы «строка» была переменной экземпляра, поскольку она просто используется временно ... может быть, лучше просто перейти

NSString *string = textField.text; 

и не объявлять его в @interface ... просто мысль.

1 голос
/ 11 июля 2009

Дважды проверьте ваши соединения в Интерфейсном Разработчике. Если textField не подключен должным образом, ваш метод не сможет прочитать свойство text поля right, что может привести к его длине 0.

0 голосов
/ 11 июля 2009

Правильно ли подключено текстовое поле в Интерфейсном Разработчике?

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