如何将UITextField的数据保存到NSMutableArray中?

时间:2011-02-04 06:52:57

标签: iphone uibutton nsmutablearray uitextfield

我正在编写一个包含两个UITextField和一个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 个答案:

答案 0 :(得分:1)

我可能会在这里遗漏一些东西但是 它说[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

答案 1 :(得分:0)

你可能有一个错字。请尝试使用-initWithObjects:

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

在重复运行时,还要确保release成员变量order并将其设置为nil,然后再进行+alloc-initWithObjects:次呼叫:

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];

答案 2 :(得分:0)

如果我正确地关注了您,那么每次按下屏幕上的按钮时,您希望有一个阵列可以存储restaurant_name_saveamount_name_save。 (我假设此按钮调用saveData方法?

在这种情况下,重新分配数组将首先清除其中的所有对象,然后将两个字符串添加到其中。您应该将数组声明为类变量,然后执行

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

修改

你在分配它吗?这是一种简单的方法,您可能需要修改它以满足您的需求 -

标题文件:

@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.
}

答案 3 :(得分:0)

使用initWithObjects代替initWithObject

并且总是在数组中设置两个对象,并且您正在打印数组的计数,这就是它始终显示为2的原因。

您编写的所有其他代码都是正确的。