Muszę przekazać ciąg od delegata aplikacji do mojego kontrolera widoku początkowego, Czy ktoś mi wymienił najlepszy sposób na zrobienie tego, również próbowałem zapisać i pobrać przy użyciu domyślnych ustawień użytkownika NS, ale nie działa poprawnie.Przekazywanie danych z delegata aplikacji do kontrolera widoku
Odpowiedz
Interfejs:
@interface MyAppDelegate : NSObject {
NSString *myString;
}
@property (nonatomic, retain) NSString *myString;
...
@end
iw pliku .m dla App Delegata byłoby napisać:
@implementation MyAppDelegate
@synthesize myString;
myString = some string;
@end
Następnie w pliku viewcontroller.m można pobrać:
MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
someString = appDelegate.myString; //..to read
appDelegate.myString = some NSString; //..to write
Ten wpis właśnie uratował mój dzień. Wielkie dzięki. – Avijit
Twoja odpowiedź powinna zawierać pisane wielkimi literami: "Moja metoda jest niebezpieczna i zła praktyka, ponieważ przerywa enkapsulację i tworzy stan globalny." –
Dostęp do kontrolera widoku root można uzyskać w ten sposób e aplikacja delegat:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
MyViewController* mainController = (MyViewController*) self.window.rootViewController;
[mainController passData:@"hello"];
return YES;
}
Tu jest dla Swift:
View Controller
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
Ponadto, jeśli masz obiekt, który ma przechodzić między widokiem sterowników (na przykład , Miałem dane CloudKit, które chciałem udostępnić) dodaj to do Delegata aplikacji:
/* Function for any view controller to grab the instantiated CloudDataObject */
func getCloudData() ->CloudData{
return cloudDataObject
}
Następnie z powrotem w View Controller
var model : CloudData = self.appDelegate.getCloudData()
To nie dla jakiegoś powodu. Powód jest dość wyraźny, ponieważ celem delegata aplikacji jest reagowanie na zmiany w stanie aplikacji. Używanie go jako miejsca składowania danych i stałych jest słabą formą i prowadzi do uzależnienia od obiektu, który nie jest obywatelem uczestniczącym w paradygmacie MVC. – Tyten