Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [Objective c] Singleton da visualizzare in tutti i metodi

    Originariamente inviato da Caiodark
    Crea una classe SingletonArray con questo header:

    codice:
    static NSMutableArray *array;
    
    @interface CBSingletonArray : NSObject
    {
        
    }
    + (NSMutableArray *)getArrayInstance;
    @end
    e questa implementazione :

    codice:
    @implementation CBSingletonArray
    + (NSMutableArray *)getArrayInstance{
        if (array == nil){
            array = [[NSMutableArray alloc] init];
        }
        return array;
    }
    @end
    In ogni file implementazione dove hai bisogno del vettore aggiungi l'import all'header SingletonArray.

    Per accedere al vettore:

    codice:
    NSMutableArray *array = [CBSingletonArray getArrayInstance];
    In questo modo sei sicuro di istanziare un solo array e di poterci accedere ovunque ti serva.

    Il primo metodo, quello che usava un NSMutableArray globale funziona davvero.
    Però ho notato ciò che (il mio idolo) Caiodark mi aveva detto: nel caso della deallocazione dell'array il programma va in palla.

    Ho cominciato ad usare il metodo del Singleton, propostomi anche quello dall'utente (che risulta essere il mio idolo) Caiodark.

    Il problema è che pur adoperandomi con tutto me stesso se uso il singleton all'interno di un metodo risulta che la dichiarazione locale nasconde le variabili d'istanza.
    Riporto: "local declaration of 'array' hides instance variable".
    codice:
    -(IBAction)addObj: (id)sender{
        NSMutableArray *array = [CBSingletonArray getArrayInstance];
        OggettoQualsiasi *oggetto = [[OggettoQualsiasi alloc] init];
        [array insertObject:oggetto atIndex:0];
    }
    Ho provato anche a dichiararlo nel main, ma rimane comunque nascosto al resto.
    Devo buttare il computer o è possibile risolvere questa roba?

    EDIT:
    Sto provando ad anteporre extern davanti al vettore richiamato all'interno del metodo, ma tutto ciò mi sta soltanto facendo innervosire
    sapientino regna sovrano

  2. #2
    -
    sapientino regna sovrano

  3. #3
    ok, sto capendo che l'errore sta nei metodi che non sono correttamente specificati.
    Però non capisco dove sia l'inghippo nello specifico.
    sapientino regna sovrano

  4. #4
    Calma e sangue freddo. Hai dichiarato NSMutableArray *array nel tuo header, togli quella dichiarazione e funziona tutto.
    ...

  5. #5
    Originariamente inviato da Caiodark
    Calma e sangue freddo. Hai dichiarato NSMutableArray *array nel tuo header, togli quella dichiarazione e funziona tutto.
    Se tolgo dall'header
    codice:
    static NSMutableArray* array;
    nel file d'implementazione dice che non ho dichiato cosa sia array già in

    codice:
    if (array == nil){
    C'è da impazzire.
    sapientino regna sovrano

  6. #6
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    extern e static non vanno d' accordo.
    extern = prende la variabile da un altro file
    static =la variabile ha linkage interno, vive cioè nell scope del file all' interno al quale è stata dichiarata.
    Non la puoi nemmeno dichiarare all' interno della classe (come campo) perché la sintassi lo vieta.

    Ti basterebbe cambiare il nome della variabili usate, ma se proprio non vuoi fare altrimenti, puoi dichiarare la variabile all' interno di un metodo:

    codice:
    - (NSMutableArray**) get
    {
        static NSMutableArray* array;
        return &array;
    }
    Per averla a disposizione quando ti pare.

  7. #7
    Se volessi utilizzare il suddetto metodo, che riporto qui sotto
    codice:
    - (NSMutableArray**) get
    {
        static NSMutableArray* array;
        return &array;
    }
    come devo modificare il file header e quello d'implementazione, che adesso sono questi
    codice:
    static NSMutableArray *array;
    
    @interface CBSingletonArray : NSObject
    {
        
    }
    + (NSMutableArray *)getArrayInstance;
    @end
    
    
    
    
    @implementation CBSingletonArray
    + (NSMutableArray *)getArrayInstance{
        if (array == nil){
            array = [[NSMutableArray alloc] init];
        }
        return array;
    }
    @end
    sapientino regna sovrano

  8. #8
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Originariamente inviato da sapientino
    Se volessi utilizzare il suddetto metodo, che riporto qui sotto
    ...
    come devo modificare il file header e quello d'implementazione, che adesso sono questi
    Prenditi un libro di Objective-C.

  9. #9
    ce l'ho ma non parla dei singleton e non ho intenzione di spendere altri 30€!!
    Qualcuno mi può dare una mano?
    sapientino regna sovrano

  10. #10
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Ma parla sicuramente di cosa mettere in un header e nel file .m che contiene l' implementazione della classe (sono le basi).

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 © 2025 vBulletin Solutions, Inc. All rights reserved.