2013-01-05 33 views
0

我正在寫檢查設備的方位的應用程序,正因爲如此,我有以下的代碼塊:需要獨立幫助調用方法: - (無效)orientationChanged:(NSNotification *)注意在IOS

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(orientationChanged:) 
               name:UIDeviceOrientationDidChangeNotification 
               object:[UIDevice currentDevice]]; 

這反過來,調用下面的方法:

- (void) orientationChanged:(NSNotification *)note { 
    ... 
} 

我想要做的是從我從一個單獨的部分貼共初始碼塊分別調用上述方法。這是可能的,如果是的話,如何?

+0

你的意思是稱呼其爲實例方法Ø f類? –

+0

是的,這是正確的。 – syedfa

回答

2

我通常在這種情況什麼是通nil作爲參數:

[self orientationChanged:nil]; 

這取決於通知本身是多麼重要的方法的實現。您可能需要構建一個通知,在它適當的信息:

NSNotification *n = [NSNotification notificationWithName:@"someName" object:someObject]; 
[self orientationChanged:n]; 

不過,我是來查看此類型需要一個代碼味道,我嘗試做的卻是提取工作的通知處理程序進行到一個單獨的方法,直接調用之一,例如:

- (void)handleOrientationChangeForDevice:(UIDevice *)d { 
    // do something here 
} 

- (void)orientationChanged:(NSNotification *)n { 
    [self handleOrientationChangeForDevice:n.object]; 
} 

然後,在調用代碼,你可以這樣做:

[self handleOrientationChangeForDevice:[UIDevice currentDevice]]; 
+0

非常感謝您的回覆,我的方法「orientationChanged」中的第一行是:UIDevice * device = note.object;這是否意味着我的UIDevice對象無效?如果是這樣,我該如何避免這種情況? – syedfa

+0

@syedfa在這個特定的例子中,你可能會用'[UIDevice currentDevice]'替代它。但是我編輯了我的問題,注意避免這種情況的方法。 –

+0

+1代碼味道。正如所暗示的那樣,這絕對是重構a好的事情。 (可愛的話也轉。) – rickster

0

如果需要設備的方向,而無需等待通知,你可以得到這樣說:

UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; 
+0

非常感謝您的回覆。我沒有檢查設備方向的問題,只是在啓動時以及在移動後檢查設備的狀態,但無論如何,都需要調用相同的方法。 – syedfa

0

你可以通過零參數或任何類型的對象NSNotification你想傳遞喜歡叫它

要調用它的同講座

[self orientationChanged:nil]; 

.M要從另一個講座

調用0
[controller orientationChanged:nil]; //Declare method in .h first 
+0

非常感謝您的回覆,我的方法「orientationChanged」中的第一行是:UIDevice * device = note.object;這是否意味着我的UIDevice對象無效?如果是這樣,我該如何避免這種情況? – syedfa

+0

正如你從@carl得到你的答案,我不需要回答。 –