Tengo un campo de texto En el que el usuario puede introducir valores en una escala de 1-10

en la parte inferior del campo de texto que he botón.

necesito agregar los valores en el texto presentado a la matriz cuando el usuario hace clic en el botón hecho

para esto escribí un código como este.

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

}

Pero cada vez que la matriz se muestra sólo el recientemente añadido un único valor en el registro de sucesos cuando clics de botón, de esta

De salida de la Consola

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

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
Pero necesito que me gusta este

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

Todos los velues entra se adde/insertar a la matriz existente.

Gracias de antemano

en ExerciseStartViewController

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

en el actual/ExerciseResult viewcontroller

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

}
  • Describir la vista de los controladores.
  • ver a mi descrito vista de los controladores de edición de la pregunta
  • ok estoy allí en caht lista pero u son invisable
  • Vea a continuación publicado mi respuesta….
InformationsquelleAutor Ranga | 2012-05-07

6 Comentarios

  1. 4

    Necesita usar un array global.

    Mejor solución es declarar un array en el AppDelegate.h archivo y alloc-init esta matriz en applicationdidfinishlaunch método.

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

    Uso UserDefaults: Estos se utilizan para guardar los datos de su aplicación en clave-valor en el formato. Los valores/objetos almacenados como userdefaults siempre permanecen en la aplicación, hasta que no se han eliminado del sandbox. Usted puede utilizar el código siguiente para almacenar una matriz en userdefaults.

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

    En AppDelegae applicationDidFinishLuanch método puede recuperar esta matriz de userdefaults uso:

    self.arrMutable = [[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"Global_Array_Key"]];
    • Si señor esta es la mejor ans entre todos estos, pero matriz de nuevo se presenta vacío/ recargar tan fresco cuando la aplicación se inicia. (en lugar de la vista de cargas)
    • usted puede utilizar NSUserDefaults si desea acceder a la misma matriz después de su aplicación arranca de nuevo
    • Editado mi Respuesta con valores predeterminados del usuario código
  2. 1

    Debe declarar e inicializar PainlevelsArray a nivel mundial, es decir, en el AppDelegate o clase separada de instancia compartida, donde la memoria se ha asignado una vez y no más de escribir sus datos a pesar de que cualquier cantidad de tiempo que acceder a la misma clase y por lo que continuamente se inserta el nuevo valor en la matriz y obtendrá el resultado deseado.

    • O podría pasar el valor de regresar a la vista anterior del controlador cuando se cierra (probablemente a través de la delegación). No necesariamente tiene que ser una variable global…
    • Instancia Global será la mejor práctica en lugar de delegar y hacer que el código innecesariamente complejo.
    • Sí, si me declara global de la matriz se inicia cada vez que lanza aplicación. En este caso la matriz se inicia cada vez que la vista de las cargas. ambos casos matriz que comienza como una matriz vacía.
    • Nope, a nivel mundial, declaró matriz permanecerá vacío hasta que la primera vez que dicho punto de vista es que se llama. Después de eso, cada vez que se inserta el valor del campo de texto en él. Mientras que, si la matriz se inicia en el momento en que dijo de vista de las cargas, permanecerá vacía siempre y no continuamente añade a la lista de valor previamente almacenado.
  3. 1
    ExerciseResult *result = [[ExerciseResult alloc] init];
    [self.navigationController pushViewController:result animated:YES];
    [result release];

    Creo que podría ser barbecho este tipo de código en la acción por venir a este punto de vista. En lugar de esto, usted tiene barbecho a tomar como global ExerciseResult *resultado

    en .h

    ExerciseResult *result;

    en .m

    in viewDidLoad
    
    result = [[ExerciseResult alloc] init];

    en acción el método que se barbecho

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

    va a seguir igual que

    Espero que esto le ayuda a usted

  4. 1

    Declarar en el Delegado.h página

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

    Delegado.m página

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

    En el Botón de vista

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

    Declarar este código donde quieres u la matriz, usted puede conseguir fácilmente ur matriz.

       AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
       NSLog(@"commString=%@",appDelegate.commString);
    • si u obras de este código aceptar esta pregunta y aumento de la ur puntos. gracias
  5. 0

    Utiliza esta línea de código cuando usted haga clic en simplemente escribir, agregue esta línea.

    [array addobject:textfield.text];

    utilizar esta solo.

    [PainlevelsArray addObject:txtField.text]
    • Si su correcta informarnos.
    • Si de estallar la vista controlador después de cada entrada es el comportamiento deseado, entonces se necesita almacenar los datos en la vista anterior del controlador de lugar.
    • Si es útil para usted, a continuación, marque lo correcto por lo que también será útil para otros
    • Yo no soy understd lo que le están diciendo.
    • Estoy diciendo que es posible que Ranga había popToRootViewController ahí por una razón y que esta solución puede no funcionar como se desea.
    • NO esa no es la razón por la que.
    • Jaja, parece muy seguro….
    • Si usted piensa que no soy de los que va a estar bien para mí amigo.
    • Que lo que ya escribí

  6. 0

    Debe utilizar las propiedades de una matriz en esta situación.

    @property (nonatomic, strong) NSMutableArray *painlevelsArray;

    Inicializar la matriz

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

    A continuación, añadir una cadena a la matriz después de cada clic de botón

    [self.painlevelsArray addObject:[NSString stringWithFormat:@"%@",self.textField.text]];
    • Esto se ve casi exactamente igual a lo que él está haciendo ya….
    • No es exactamente el mismo. Que necesita para utilizar propiedades para administrar esta matriz. No estoy seguro de cómo es la vista de muchos controladores que él está utilizando. Él debe inicializar la matriz en su principal controlador de vista y pasar a la vista controlador con el botón para añadir un objeto a la misma. Nos falta mucho código para mí para responder apropiadamente a este.

Dejar respuesta

Please enter your comment!
Please enter your name here