文字列をApp Delegateから最初のView Controllerに渡す必要があります。誰かが私にそれを行うための最良の方法をリストできますか。また、NS user Defaultsを使用して保存して取得しようとしましたが、そうではありませんうまく動かない。
インターフェース:
@interface MyAppDelegate : NSObject {
NSString *myString;
}
@property (nonatomic, retain) NSString *myString;
...
@end
app Delegateの.mファイルに次のように記述します。
@implementation MyAppDelegate
@synthesize myString;
myString = some string;
@end
次に、viewcontroller.mファイルでフェッチできます:
MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
someString = appDelegate.myString; //..to read
appDelegate.myString = some NSString; //..to write
これはSwift用です:
View Controller
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
さらに、ビューコントローラー間で渡したいオブジェクトがある場合(たとえば、共有したいCloudKitデータがあった場合)、これをApp Delegateに追加します。
/* Function for any view controller to grab the instantiated CloudDataObject */
func getCloudData() ->CloudData{
return cloudDataObject
}
次にView Controllerに戻ります
var model : CloudData = self.appDelegate.getCloudData()
アプリのデリゲートから次のようにルートビューコントローラーにアクセスできます。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
MyViewController* mainController = (MyViewController*) self.window.rootViewController;
[mainController passData:@"hello"];
return YES;
}
使用Swift 4.2:
AppDelegateからViewControllerにデータを渡す:
let yourViewController = self.window?.rootViewController as? YourViewController
yourViewController?.passData(YOUR_DATA) // pass data
let data = yourViewController?.getData() // access data
ViewControllerからAppDelegateにデータを渡す:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.passData(YOUR_DATA) // pass data
let data = appDelegate.getData() // access data
YourViewControllerまたはAppDelegateに以下のコードを追加:
private var data : String? // String? or any type you want
func getData() -> String? {
return data
}
func passData(_ data : String?) {
self.data = data
}