{"id":3246,"date":"2010-05-04T10:17:34","date_gmt":"2010-05-04T08:17:34","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=3246"},"modified":"2010-05-04T10:17:34","modified_gmt":"2010-05-04T08:17:34","slug":"t037-accedere-alle-stesse-variabili-da-classi-diverse","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t037-accedere-alle-stesse-variabili-da-classi-diverse\/","title":{"rendered":"T#037 &#8211; Accedere alle stesse variabili da classi diverse"},"content":{"rendered":"<p>Nella costruzione delle nostre applicazioni pu\u00f2 capitare ( come \u00e8 accaduto a me ) di avere due View in cui dalla seconda di deve necessariamente modificare delle variabili usate nella prima.<br \/>\nNel mio caso, in particolare, avevo le necessit\u00e0, a seconda della pressione di una riga di una tabella, di visualizzare un Picker che modificasse un Dictionary presente nella prima classe ( quella della tabella per intenderci ). Insomma, dovevo <strong>usare stesse variabili da classi differenti<\/strong>. Inizialmente pensai di sfruttare le variabili globali ma, come i pi\u00f9 reduci dalla programmazione sapranno, la variabili globali sono sempre &#8220;in linea di massima&#8221; sconsigliate.<!--more--> Le variabili dovrebbero avere, sempre, il campo di applicazione pi\u00f9 piccolo possibile. Aumentandolo, infatti, non si farebbe altro che ottenere pi\u00f9 codice in grado di modificare potenzialmente la variabile e aumentare la complessit\u00e0 generale del codice, le difficolt\u00e0 nella correzione di eventuali errori e il riutilizzo dello stesso.<\/p>\n<p>Cercando in rete mi sono imbattuto in una soluzione, secondo me, da tener presente e che ho correttamente utilizzato. In parole povere viene sfruttato il delegate per trasferire i dati tra le classi.<\/p>\n<p>Diamo uno sguardo al codice per capire al meglio le operazioni da compiere.<\/p>\n<p>Innanzitutto diamo per scontato di avere due classi <em>ClasseA<\/em> e <em>ClasseB<\/em>.<br \/>\nNel delegate della nostra applicazione effettuiamo le seguenti dichiarazioni:<\/p>\n<pre lang=\"sql\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n\r\n@class ClasseA, ClasseB; \/\/ Le nostre due classi\r\n\r\n@interface PickerAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {\r\n    UIWindow *window;\r\n    UITabBarController *tabBarController;\r\n    NSMutableString *variabile; \/\/ Ammettiamo che sia questa la variabile da condividere\r\n}\r\n\r\n@property (nonatomic, retain) IBOutlet UIWindow *window;\r\n@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;\r\n@property (nonatomic, retain) NSMutableString *variabile;\r\n\r\n@end\r\n<\/pre>\n<p>Nel file di implementazione (.m) del nostro Delegate sintetizziamo semplicemente la variabile:<\/p>\n<pre lang=\"sql\" escaped=\"true\">\r\n@synthesize variabile;\r\n<\/pre>\n<p>Accediamo ora alle nostre due classi <em>ClasseA<\/em> e <em>ClasseB<\/em> in cui dobbiamo utilizzare la variabile. In queste due classi importiamo il delegate nel solito modo<\/p>\n<pre lang=\"sql\" escaped=\"true\">\r\n#import \"NostroProgettoDelegate.h\"\r\n<\/pre>\n<p>Dove dobbiamo utilizzare la variabile &#8220;condivisa&#8221; effettuiamo questa dichiarazione:<\/p>\n<pre lang=\"sql\" escaped=\"true\">\r\nNostroProgettoDelegate *mainDelegate = (NostroProgettoDelegate *)[[UIApplication sharedApplication]delegate];\r\n<\/pre>\n<p>accediamo quindi alla nostra variabile condivisa in questo modo:<\/p>\n<pre lang=\"sql\" escaped=\"true\">\r\nmainDelegate.variabile \r\n<\/pre>\n<p>effettuando su di essa tutte le operazioni necessarie. Nient&#8217;altro!<\/p>\n<p>Descriviamo ora brevemente, per concludere, la classe UIApplication:<\/p>\n<p>La <strong>UIApplication<\/strong> fornisce un punto centralizzato di controllo per le applicazioni per iPhone OS. Ogni applicazione ha una istanza UIApplication. Quando un&#8217;applicazione viene lanciata la UIApplicationMain viene richiamata. Questa classe, tra le altre cose, crea un&#8217;oggetto UIApplication singleton ( un&#8217;istanza a cui \u00e8 associato un punto di accesso globale ) a cui \u00e8 possibile accedere richiamando il metodo della classe sharedApplication. Inoltre la classe UIApplication contiene un metodo che consente di accedere al delegate della nostra applicazione, grazie quindi a questo metodo dell&#8217;oggetto, riusciamo ad accedere alla variabile creata nel delegate.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nella costruzione delle nostre applicazioni pu\u00f2 capitare ( come \u00e8 accaduto a me ) di avere due&#8230;<\/p>\n","protected":false},"author":46,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[88,120,1,160,214],"class_list":["post-3246","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-programmazione-iphone","tag-tutorial","tag-tutorial-pratici","tag-uiapplication","tag-variabili-classi-differenti"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3246","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/46"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=3246"}],"version-history":[{"count":2,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3246\/revisions"}],"predecessor-version":[{"id":3297,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3246\/revisions\/3297"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=3246"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=3246"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=3246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}