我有一个文本字段,用户可以输入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,
)
所有输入的线索都是adde /插入现有阵列。
提前致谢
在ExerciseStartViewController中
-(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];
}
答案 0 :(得分:4)
您需要使用全局数组。
最好的解决方案是在AppDelegate.h文件中声明一个数组,并在applicationdidfinishlaunch方法中使用alloc-init这个数组。
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"]];
答案 1 :(得分:1)
你需要全局声明和初始化PainlevelsArray,即在AppDelegate或单独的共享实例类中,其中内存已被分配一次,即使你访问所述类的任何时间都不会过度写入其数据,所以它会不断地将新值插入到数组中,您将获得所需的结果。
答案 2 :(得分:1)
ExerciseResult *result = [[ExerciseResult alloc] init];
[self.navigationController pushViewController:result animated:YES];
[result release];
我认为您可能会在此行动中尝试这种类型的代码来进入此视图。而不是这个你必须休闲作为全球ExerciseResult *结果
in .h
ExerciseResult *result;
in .m
in viewDidLoad
result = [[ExerciseResult alloc] init];
在你的行动方法中你将休闲
[self.navigationController pushViewController:result animated:YES];
你会这样跟着
我希望它会帮助你
答案 3 :(得分:1)
在Delegate.h页面中声明
@interface AppDelegate : NSObject <UIApplicationDelegate>
{
NSMutableArray *commString;
}
@property (nonatomic, retain) NSMutableArray *commString;
@end
Delegate.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);
答案 4 :(得分:0)
单击“只需写入添加此行”即可使用此行代码。
[array addobject:textfield.text];
仅使用此功能。
[PainlevelsArray addObject:txtField.text]
答案 5 :(得分:0)
在这种情况下,您应该使用数组属性。
@property (nonatomic, strong) NSMutableArray *painlevelsArray;
初始化数组
NSMutableArray *array = [[NSMutableArray alloc] init];
self.painlevelsArray = array;
然后在每个按钮单击
后将字符串添加到数组中[self.painlevelsArray addObject:[NSString stringWithFormat:@"%@",self.textField.text]];