Как я могу сохранить данные UITextField в NSMutableArray? - PullRequest
0 голосов
/ 04 февраля 2011

Я пишу простую программу, имеющую два UITextFields и одну UIButton. Когда я нажимаю UIButton, вызывается метод, кодирование этого метода как показано ниже

-(void) saveData{

    restaurant_name_save = restaurant_name_textfield.text;
    amount_name_save = amount_textfield.text;

    order = [[NSMutableArray alloc] initWithObject: restaurant_name_save, amount_name_save, nil];
    NSLog(@"%@", order);

    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"warning" message:[NSString stringWithFormat:@"%d",[order count]] delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];
    [alert show];
    [alert release];
}

В NSLog обе данные UITextField отображаются правильно, но в UIAlertView они всегда показывают 2, даже когда я меняю данные и снова нажимаю кнопку ...

Что мне делать, я просто хочу сохранить данные каждый раз в NSMutableArray, когда я нажимаю кнопку ,,

пожалуйста, помогите ....

Ответы [ 4 ]

1 голос
/ 04 февраля 2011

Я мог бы что-то здесь упустить, но там написано [order count]:

UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"warning" 
message:[NSString stringWithFormat:@"%d",[order count]] 

delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];

Вывод [order count] будет равен 2, поскольку в массиве есть две записи.

Я бы предположил увидеть содержимое массива, который вы пишете stringWithFormat:@"%@", order

0 голосов
/ 04 февраля 2011

Если я следую за вами правильно, вы хотите иметь один массив, в котором вы хотите хранить restaurant_name_save и amount_name_save при каждом нажатии кнопки на вашем экране. (Я предполагаю, что эта кнопка вызывает метод saveData?

В этом случае перераспределение массива сначала очистит все объекты в нем, а затем добавит к нему две строки. Вы должны объявить ваш массив как переменную класса и просто сделать

[order addObject:string1];
[order addObject:string2];

EDIT:

Вы это распределяете? Вот простой способ сделать это, вам может понадобиться изменить его в соответствии с вашими потребностями -

Заголовочный файл:

@interface WelcomeScreen : UIViewController {
    NSMutableArray *array;
}

@property (nonatomic, retain) NSMutableArray *array;
-(IBAction) saveData:(id) sender;

Исходный файл

@synthesize array;

-(void) viewDidLoad {
    array = [[NSMutableArray alloc] init];
}

// Make the UIButton's tap option point to this -
-(IBAction) saveData:(id) sender
{
    [array addObject:string1];
    [array addObject:string2];

    // alert.
}
0 голосов
/ 04 февраля 2011

использование initWithObjects insted из initWithObject

и всегда два объекта установлены в массиве, и вы печатаете количество массивов, поэтому он всегда показывает 2.

все остальные написанные вами коды верны.

0 голосов
/ 04 февраля 2011

У вас может быть опечатка.Попробуйте вместо этого использовать -initWithObjects::

order = [[NSMutableArray alloc] initWithObjects: restaurant_name_save, amount_name_save, nil];

При повторных запусках также убедитесь, что вы release переменную-член order и установите ее на nil, прежде чем делать другие +alloc и -initWithObjects: call:

if (order) {
    [order release], order = nil;
}
order = [[NSMutableArray alloc] initWithObjects: restaurant_name_save, amount_name_save, nil];
...

Еще лучше, не используйте несколько раз +alloc и -initWithObjects: в этом методе, но вне этого метода (возможно, в методе init более крупного объекта) создайте NSMutableArray вместимость 2:

self.order = [[[NSMutableArray alloc] initWithCapacity:2] autorelease];

В методе, который обрабатывает действие кнопки, установите элементы с соответствующими индексами:

[order replaceObjectAtIndex:0 withObject:restaurant_name_textfield.text];
[order replaceObjectAtIndex:1 withObject:amount_textfield.text];
...