0

我有一个文本字段,用户可以在其中输入 1-10 的值

在文本字段的底部我有按钮。

当用户单击完成按钮时,我需要将文本字段中的值添加到数组中

为此,我编写了这样的代码。

- (void)viewDidLoad
{
    [super viewDidLoad];
    PainlevelsArray = [[NSMutableArray alloc] init]; //PainlevelsArray declared in .h

}


-(IBAction)doneClick:(id)sender
{
    [PainlevelsArray addObject:txtField.text ];

    // [PainlevelsArray insertObject:rateLabel.text atIndex:0 ];
    NSLog(@"PainlevelsArray *** %@",PainlevelsArray);

   [self.navigationController popToRootViewControllerAnimated:YES];

}

但是每次单击按钮时,数组仅在日志中仅显示最近添加的一个值,如下所示

控制台输出

=========================

2012-05-07 10:11:15.689 ESPT[796:10d03] PainlevelsArray *** (
    2
)
2012-05-07 10:11:27.984 ESPT[796:10d03] PainlevelsArray *** (
    4
)

My array gets empty every time view loads, and adde a fresh entry when button clicks 但我需要这样

2012-05-07 10:11:27.984 ESPT[796:10d03] PainlevelsArray *** (
        4,
        5,
        2,
        6,
        8,
    )

所有输入的 velues 都添加/插入到现有数组中。

提前致谢

在练习开始视图控制器中

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
 ExerciseResult *result = [[ExerciseResult alloc] init];
            [self.navigationController pushViewController:result animated:YES];
            [result release];
    }

在当前/ExerciseResult 视图控制器中

- (void)viewDidLoad
{
    [super viewDidLoad];
    PainlevelsArray = [[NSMutableArray alloc] init]; //PainlevelsArray declared in .h

}


-(IBAction)doneClick:(id)sender
{
    [PainlevelsArray addObject:txtField.text ];

    // [PainlevelsArray insertObject:rateLabel.text atIndex:0 ];
    NSLog(@"PainlevelsArray *** %@",PainlevelsArray);

   [self.navigationController popToRootViewControllerAnimated:YES];

}
4

6 回答 6

4

您需要使用全局数组。

最好的解决方案是在 AppDelegate.h 文件中声明一个数组,并在 applicationdidfinishlaunch 方法中分配初始化这个数组。

AppDelegate *app =  (AppDelegate*)[[UIApplication sharedApplication] delegate];
[app.arrMutable addObject:textField.text ]; 

使用 UserDefaults:这些用于以键值格式保存您的应用程序数据。存储为 userdefaults 的值/对象始终保留在应用程序中,直到您没有将其从沙箱中删除。您可以使用以下代码将数组存储在 userdefaults 中。

[[NSUserDefaults standardUserDefaults] setObject:app.arrMutable forKey:@"Global_Array_Key"];

在 AppDelegae applicationDidFinishLuanch 方法中,您可以使用以下方法从 userdefaults 中检索此数组:

self.arrMutable = [[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"Global_Array_Key"]];
于 2012-05-07T05:30:13.880 回答
1

您需要全局声明和初始化 PainlevelsArray,即在 AppDelegate 或共享实例的单独类中,其中内存已分配一次,即使您多次访问该类,它也不会覆盖其数据,因此它将不断地将新值插入数组中,您将获得所需的结果。

于 2012-05-07T04:54:38.877 回答
1
ExerciseResult *result = [[ExerciseResult alloc] init];
[self.navigationController pushViewController:result animated:YES];
[result release];

我认为您可能会在您的操作中使用这种类型的代码来获取此视图。取而代之的是,您必须放松以将其作为全局练习结果 *结果

在.h

ExerciseResult *result;

in viewDidLoad

result = [[ExerciseResult alloc] init];

在你的行动方法中,你会放松

[self.navigationController pushViewController:result animated:YES];

你会这样跟随

我希望它会帮助你

于 2012-05-07T05:02:16.377 回答
1

在 Delegate.h 页面中声明

  @interface AppDelegate : NSObject <UIApplicationDelegate>
  {
       NSMutableArray *commString;
  }
  @property (nonatomic, retain) NSMutableArray *commString;
  @end

代表.m页面

  @sythesize commString;

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
          commString = [[NSMutableArray alloc] init];
          // some code.....
 }

在您的按钮视图中

 -(IBAction)doneClick:(id)sender
{
NSMutableArray *mut=[[NSMutableArray alloc] initWithObjects:txtField.text,nil];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.commString=mut;

   // some code....
}

在你想要你的数组的地方声明这个代码,你可以很容易地得到你的数组。

   AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
   NSLog(@"commString=%@",appDelegate.commString);
于 2012-05-07T07:02:29.967 回答
0

当您单击时使用这行代码只需编写添加此行。

[array addobject:textfield.text];

只用这个。

[PainlevelsArray addObject:txtField.text]
于 2012-05-07T04:50:18.337 回答
0

在这种情况下,您应该使用数组的属性。

@property (nonatomic, strong) NSMutableArray *painlevelsArray;

初始化数组

NSMutableArray *array = [[NSMutableArray alloc] init];
self.painlevelsArray = array;

然后在每次单击按钮后将您的字符串添加到数组中

[self.painlevelsArray addObject:[NSString stringWithFormat:@"%@",self.textField.text]];
于 2012-05-07T05:00:00.660 回答