2013-11-04 493 views
0

我想從「IAPHelper」的「SettingsViewController」中調用一個方法。爲什麼我不能從其他課程調用方法?

尋找答案後,我想我已經得到了如何去做的要點。下面是我做了什麼:

SettingsViewController.h

@interface SettingsViewController : UITableViewController 

- (void)stopActivityIndicatorAnimating; 

SettingsViewController.m

- (void)stopActivityIndicatorAnimating 
{ 
// DO STUFF 
} 

IAPHelper.h

#import "SettingsViewController.h" 

IAPHelper.m

SettingsViewController *settingsViewControllerInstance = [[SettingsViewController alloc] init]; 
[settingsViewControllerInstance stopActivityIndicatorAnimating]; 

現在,我已經搜索周圍的人誰有同樣的問題,但對我來說,所有的解決方案看起來像我在做什麼!

我遇到的問題是沒有錯誤,代碼應該執行(我已經添加了NSLog),但它應該調用的方法內部的代碼不會發生。這只是默默地不做。

可能有人請告訴我,如果我錯過了一些東西,所做的這一切完全錯誤的(最有可能),或者如果它真的應該工作,我做錯了什麼其他地方,在這種情況下,我會離開你獨自一人。

謝謝!

+0

代碼似乎罰款,如果日誌也來了,然後你應該懷疑你的stopActivityIndi​​catorAnimating中的代碼。也許你在nil對象上做了一些任務,它會默默執行而不是崩潰。 – HRM

回答

2

我建議使用NSNotification。

在你IAPHelper.m發出通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"StopAnimating" 
                object:self]; 

而在你SettingsViewController.m viewDidLoad方法做:

​​3210

使用此代碼的通知將被髮送IAPHelper類裏面您的SettingsViewController類將調用stopActivityIndi​​catorAnimating方法。

+0

它的工作!感謝您使用示例提供的幫助,這給了我一些幫助。 –

4

在您的IAPHelper中,您正在創建一個新的viewContorller。這是您發送stopActivityIndi​​catorAnimating消息的對象。由於此viewControllers視圖可能不在可見的viewHierarchy中,因此您將看不到任何效果。 解決這個問題的方法有更好的設計,例如:讓您的IAPHelper發出合適的NSNotification。然後,viewCotroller可以觀察此通知並對其執行操作(即打開或關閉activityMonitor)。 由於您的IAPHelper很可能是數據層類型的對象,因此您不希望將其與ViewController耦合,因爲這會導致設計非常僵化,並且像這樣的問題變得更加頻繁和更加困難。

+0

+1爲你的好解釋。感謝您的幫助,使用NSNotification工作。就像你說的那樣,它一定是因爲視圖在層次結構中不可見。我沒有任何關於NSNotification的經驗,所以我不得不用克里斯的答案來解決這個問題。 –

0

正如其他答案建議你可以有一個比這更好的設計。

從上面的代碼我覺得你已經創建並啓動了對象A中的動畫並嘗試創建對象B並在對象B中執行停止動畫方法。您應該傳遞對象的正確引用(引用對象A)到IAPHelper並從該對象調用停止動畫。

你IAPHelper應該是這樣的

IAPHelper.h

#import "SettingsViewController.h" 
@property (nonatomic, strong)SettingsViewController *settingsViewControllerInstance; 

IAPHelper.m

[self.settingsViewControllerInstance stopActivityIndicatorAnimating]; 
+0

感謝您的幫助,但NSNotification解決了這一問題。出於興趣,我嘗試了你的解決方案,但它不適合我。就像Joride說的那樣,它必須是視圖不在視圖層次結構中。 –

+1

爲了使它工作,你需要實例化對象IAPHelper後通過SettingsViewController的指針。像'IAPHelper *幫手= [[IAPHelper的alloc]初始化]''helper.settingsViewControllerInstance =自我;'**但不管怎麼說,你不應該這樣做**。 – crizztus

相關問題