2013-02-24 25 views
28

Tôi cần truyền một chuỗi từ App delegate đến Controller View ban đầu của tôi, Ai đó có thể liệt kê cho tôi cách tốt nhất để làm điều đó, tôi cũng cố gắng lưu và truy xuất bằng cách sử dụng mặc định của người dùng NS nhưng tôi không làm việc đúng cách.Truyền dữ liệu từ ứng dụng ủy quyền tới View Controller

+0

Đó không phải là vì một lý do. Lý do là khá rõ ràng trong đó mục đích của đại biểu của ứng dụng là để đáp ứng với những thay đổi trong trạng thái của ứng dụng. Sử dụng nó như một bãi rác cho dữ liệu và hằng số là hình thức nghèo nàn và dẫn đến sự phụ thuộc vào một đối tượng không phải là một công dân đóng góp trong mô hình MVC. – Tyten

Trả lời

28

Interface:

@interface MyAppDelegate : NSObject { 
    NSString *myString; 
} 
@property (nonatomic, retain) NSString *myString; 
... 
@end 

và trong file .m cho App việc quý vị sẽ viết:

@implementation MyAppDelegate 
@synthesize myString; 
    myString = some string; 
@end 

Sau đó, trong tập tin viewcontroller.m bạn có thể lấy:

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate]; 
someString = appDelegate.myString; //..to read 
appDelegate.myString = some NSString;  //..to write 
+2

Bài đăng này vừa lưu lại ngày của tôi. Cảm ơn rất nhiều bạn. – Avijit

+0

Câu trả lời của bạn nên được viết bằng chữ in hoa: "Phương pháp của tôi là thực hành nguy hiểm và không tốt, bởi vì nó phá vỡ đóng gói và tạo ra trạng thái toàn cầu." –

14

Bạn có thể truy cập trình điều khiển chế độ xem gốc của bạn như thế này từ e ứng dụng đại biểu:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    MyViewController* mainController = (MyViewController*) self.window.rootViewController; 
    [mainController passData:@"hello"]; 

    return YES; 
} 
17

Ở đây nó là dành cho Swift:

View Controller

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate 

Hơn nữa, nếu bạn có một đối tượng mà bạn muốn vượt qua giữa quan điểm điều khiển (ví dụ , Tôi có dữ liệu CloudKit mà tôi muốn chia sẻ) thêm số này vào App Delegate:

/* Function for any view controller to grab the instantiated CloudDataObject */ 
func getCloudData() ->CloudData{ 
    return cloudDataObject 
} 

Sau đó trở lại trong View Controller

var model : CloudData = self.appDelegate.getCloudData() 
Các vấn đề liên quan