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

}

ただし、このように、ボタンがクリックされたときに、配列がログに最近追加された1つの値のみを表示するたびに

コンソールでの出力

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

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,
    )

入力されたすべてのビューは、既存のアレイに追加/挿入されます。

前もって感謝します

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

}
4

6 に答える 6

4

グローバル配列を使用する必要があります。

考えられる最善の解決策は、AppDelegate.hファイルで配列を宣言し、applicationdidfinishlaunchメソッドでこの配列をalloc-initすることです。

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

UserDefaultsを使用:これらは、アプリケーションデータをKey-Value形式で保存するために使用されます。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];

私はあなたがこの見解に到達するためのあなたの行動の中でこのタイプのコードを休むかもしれないと思います。これの代わりに、グローバルなExerciseResult*resultとして取得するために休む必要があります

.hで

ExerciseResult *result;

.mで

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

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);
于 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 に答える