Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 36
  1. #1

    [Objective C] Creare un array solo nel caso in cui non esista

    Ciao a tutti.
    Ho appena iniziato con l'Obj C e stanno sorgendo i primi problemi.
    Vorrei una mano a creare un vettore numerico solo nel caso in cui non esista.
    Faccio così ma di sicuro sbagli alla grande.
    Perché?

    codice:
    -(IBAction)aggiungiNumeroAlVettoriNumeri:(id)sender{
          	if (! [numeri count] ){
                  NSMutableArray *numeri;
                   numeri = [[NSMutableArray alloc] init];
            }  
    numeri[0]=1;
    }
    Grazie.
    sapientino regna sovrano

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Prima dell' if numeri esiste già, allora perché fai shadowing nello scope dell' if?
    Stai a tutti gli effetti allocando un oggetto il cui riferimento verrà perso.
    Comunque per aggiungere un oggetto all' array (ad esempio un numero col valore uno), puoi fare:

    codice:
    NSNumber* number=[[NSNumber alloc]initWithInt: 1];
    [numeri insertObject: number atIndex:0];
    Ma ti suggerisco di guardare la documentazione.

  3. #3
    MMmmmm forse non mi sono spiegato bene.
    Se premo il tasto a cui associo l'azione per la prima volta voglio che venga creato il vettore e gli vengano aggiunti i numeri all'interno, mentre se il tasto lo ripremo voglio aggiungere numeri al vettore che avevo già creato la prima volta che ho premuto il tasto.
    codice:
    -(IBAction)addNumberToNumbersArray:(id)sender{
        if (! [numeri count] ){
        NSMutableArray *numeri = [[NSMutableArray alloc] init];
        }
        NSNumber* number=[[NSNumber alloc]initWithInt: 1];
        //[numeri insertObject: number atIndex:0];
        [numeri addObject: number];
        [number release];
    }
    So che *numeri non verrà vista all'esterno, ma non so come ovviare al problema.
    Dove cavolo sbaglio?
    Sto impazzendo
    (in ogni caso grazie per l'aiuto)
    sapientino regna sovrano

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Basta che in qualche modo riesci a sapere se l' oggetto è stato creato o no.
    Ad esempio nel metodo init della tua classe inizializzi numeri a nil, per cui sai che se l' oggetto non è stato creato, lo devi creare.
    Puoi fare così:

    codice:
    -(IBAction)addNumberToNumbersArray: (id)sender
    {
        if (numeri==nil)
            numeri=[[NSMutableArray alloc]init];
        NSNumber* number=[[NSNumber alloc]initWithInt: 1];
        [numeri addObject: number];
        [number release];
    }
    Ma anche l' allocazione la potresti fare nel metodo init.

  5. #5
    Posso farlo in
    codice:
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    oppure sbaglio?

    Il metodo init on so cos'è e non l'ho mai usato. Non è che potresti darmi qualche delucidazione in più?
    sapientino regna sovrano

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ogni classe ha il suo metodo init, che lo eredita da NSObject.
    Quando ri-definisci il metodo init, fai overriding, ovvero se su un oggetto appartenente a quella classe usi il metodo init, viene usato quello che hai definito te.
    Quando hai dichiarato:

    codice:
    NSMutableArray *numeri = [[NSMutableArray alloc] init];
    Hai usato il metodo init della classe NSMutableArray.
    Questo metodo serve per inizializzare i campi della classe.Generalmente include una chiamata al metodo init della superclasse, per inizializzare anche i campi ereditati.
    Ecco un esempio di come puoi fare:

    codice:
    - (id)init
    {
        self = [super init];
        if (self) 
        {
            numeri=[[NSMutableArray alloc]init];
        }
        return self;
    }
    Però studiatele queste cose, non hai un libro o un manuale?

  7. #7
    Sì, ho un libro che si chiama "Programmare applicazioni per iPhone e iPad", pagato la bellezza di 29,90€.
    Sto notando però che fa davvero schifo!

    Il metodo init all'interno di cosa dovrei metterlo?
    @interface ViewController
    e
    @implementation ViewController
    Va bene lì?
    sapientino regna sovrano

  8. #8
    Boh, non ci riesco.
    Non viene visto l'array, perché si trova all'interno di un altro blocco.
    codice:
    - (id)init
    {
        self = [super init];
        if (self)
        {
            NSMutableArray *numeri = [[NSMutableArray alloc] init];
        }
        return self;
    }
    
    -(IBAction)addNumeroToNumeri:(id)sender
    {
        //if (numeri==nil){
        //    NSMutableArray *numeri = [[NSMutableArray alloc] init];
        //}
        NSNumber* number=[[NSNumber alloc]initWithInt: 1];
         [numeri insertObject: number atIndex:0];
        [numeri addObject: number];
    }
    Secondo me questo linguaggio di programmazione mi farà impazzire.

    Ti allego una foto con gli errori
    sapientino regna sovrano

  9. #9
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    numeri deve essere un campo della classe.
    Prendititi "Cocoa programming for Mac Os X".
    Ma se proprio non hai le basi fai prima a studiarti le basi dell' OOP.

  10. #10
    Originariamente inviato da ramy89
    Prendititi "Cocoa programming for Mac Os X".
    Ma se proprio non hai le basi fai prima a studiarti le basi dell' OOP.
    Io e l'inglese non andiamo tanto d'accordo!

    Originariamente inviato da ramy89
    numeri deve essere un campo della classe.
    Di quale classe?
    sapientino regna sovrano

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.