☉目標:在第一個頁面,點選下一頁的按鈕後設定全域變數的數值,接著切換到第二個頁面,在第二個頁面點選按鈕後可以取得全域變數的數值。
☉使用時機:在作頁面切換的時候,可能會需要傳遞一些參數,這些參數的量不大,存到資料庫太麻煩,沒有必要存到資料庫再取出,因此可以用這樣的方式處理。
☉步驟說明:
(1)在TransferViewAppDelegate.h宣告一個變數,這裡我取名為globalData。記得要設置@property和@synthesize。
@interface TransferViewAppDelegate : NSObject <uiapplicationdelegate> {
NSManagedObjectModel *managedObjectModel;
NSManagedObjectContext *managedObjectContext;
NSPersistentStoreCoordinator *persistentStoreCoordinator;
UIWindow *window;
UINavigationController *vc1;
//global variable
NSMutableArray *globalData;
}
- (IBAction)saveAction:sender;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (nonatomic, readonly) NSString *applicationDocumentsDirectory;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *vc1;
@property (nonatomic, retain) IBOutlet NSMutableArray *globalData;
@end
(2)切換頁面的相關程式碼可以參考簡單的View切換教學,但是這篇文章對於Interface Builder的使用僅以圖片帶過,沒有做太多的著墨,初學者可能會有點混淆,建議參考這篇建立View和Controller的對應關係,相信能夠比較快的進入狀況。 接下來,假設你的程式已經可以正確的進行頁面切換(從第一頁切換到第二頁)(3)在第一頁的header file:page1.h宣告AppDelegate變數。記得要設置@property和@synthesize。
#import <uikit uikit.h>
#import "page2.h"
@interface page1 : UIViewController {
page2 *pg2;
TransferViewAppDelegate *appDelegate;
}
-(IBAction)nextPage:(id)sender;
@property (nonatomic,retain) IBOutlet page2 *pg2;
@property (nonatomic,retain) IBOutlet TransferViewAppDelegate *appDelegate;
@end(4)在page1.m中設定全域變數的數值為「12345678」。我是加在viewDidLoad事件中,這表示在view被載入後這個事件處理常式就會被執行。或者,你也可以加在頁面切換的button事件中(Touch Up Inside)。
- (void)viewDidLoad {
[super viewDidLoad];
appDelegate = (TransferViewAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.globalData = [[NSMutableArray alloc] init];
[appDelegate.globalData addObject:@"12345678"];
}
上面程式碼先取得整個應用程式的appDelegate,一個iPhone應用程式只有一個appDelegate。接著,初始化appDelegate中的變數,也就是我們在步驟(1)宣告的變數。最後,設定變數的數值為12345678。
這是本篇教學的重點。透過這樣的方式取得appDelegate,我們就可以在任何頁面存取appDelegate中的變數。
appDelegate = (TransferViewAppDelegate *)[[UIApplication sharedApplication] delegate];
(5)在page2.h中重複步驟(3)的動作,只是現在是要在第二頁的header file:page2.h,宣告AppDelegate變數,並記得要設置@property和@synthesize。
(6)最後,在取得全域變數資料的按鈕中加入下列程式碼。
@synthesize appDelegate;
-(IBAction)getGlobalVariable:(id)sender{
appDelegate = (TransferViewAppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *data = [appDelegate.globalData objectAtIndex:0];
}
在這段程式碼中,先取出了appDelegate。接著,從appDelegate裡面取出全域變數的數值。設置中斷點(breakpoint)你可以看到資料被正確的傳遞!
☉程式範例:下載



部落格首頁
我的履歷表
旅遊全記錄
程式創作地
彩色照相本
寫於:
標籤:







張貼意見
不好意思,我是一個iphone新手,想請教您一下,關於全域變數這個程式,我執行以後我點選"取得上一頁的資料"並無任何反應,在Xcode裡面有個警告在第19行 warring:uused variable'data' 想請教您這部分是什麼問題,謝謝!