所以我有一個應用程序與應用程序購買。 In App購買在FirstViewController中進行管理。當用戶購買產品時,我想向我的MainTableViewController發送通知以重新加載表格數據並顯示在應用內購買時購買的新對象。所以基本上我想發送從A類到B類的通知,然後B類重新加載tableview的數據。我曾嘗試使用NSNotificationCenter,但沒有成功,但我知道它可能與NSNotificationCenter我只是不知道如何。發送NSNotification從classA到classB
回答
在A類:發佈通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated"
object:self];
在B類:第一登記通知,並寫至處理它的方法。
您可以爲該方法提供相應的選擇器。
// view did load
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleUpdatedData:)
name:@"DataUpdated"
object:nil];
-(void)handleUpdatedData:(NSNotification *)notification {
NSLog(@"recieved");
[self.tableView reloadData];
}
也許你試圖從另一個線程發送通知? NSNotification不會從另一個線程傳遞給觀察者。
我如何知道它是否從另一個線程發送? – JonasG
嘗試比較[NSThread currentThread]在你通知觀察的類中[NSThread mainThread]產生通知的地方。 –
還要確保,當你添加觀察者時你沒有指定**對象**。 –
好吧我加入多一點信息,以文斯的回答
在A類:發佈通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated"
object:arrayOfPurchasedObjects];
在B類:先註冊通知,並寫入的方法處理它。
您可以爲該方法提供相應的選擇器。在發佈通知之前確保您的B班已分配,否則其他通知將無法使用。
- (void) viewDidLoad {
// view did load
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleUpdatedData:)
name:@"DataUpdated"
object:nil];
}
-(void)handleUpdatedData:(NSNotification *)notification {
NSLog(@"recieved");
NSArray *purchased = [notification object];
[classBTableDataSourceArray addObjectsFromArray:purchased];
[self.tableView reloadData];
}
- (void) dealloc {
// view did load
[[NSNotificationCenter defaultCenter] removeObserver:self
name:@"DataUpdated"
object:nil];
[super dealloc];
}
- 1. 的Android阿雷發送從CLASSA到CLASSB
- 2. 當從$ classA調用$ classB時,從$ classB中訪問$ classA - > __ construct()
- 3. 從classA調用數組到classB
- 4. C#:ClassA實例化ClassB,以便ClassB可以訪問ClassA屬性?
- 5. 從ClassA的TextView的定義ClassB中
- 6. 如何從classB訪問ClassA的方法?
- 7. 我如何從classA導入/鏈接信息到classB到XCode
- 8. ClassB繼承ClassA。如何檢查ClassA objA是否爲ClassB類型,然後將objA轉換爲ClassB?
- 9. 從ClassA轉換到ClassB的設計指南
- 10. 如何從另一個ClassB滾動到ClassA中的UIScrollView頂部
- 11. 我如何從R語言中ClassA調用ClassB,ClassA和ClassB在不同的文件中
- 12. 當ClassB繼承ClassA時,如何投射列表<ClassB>至列表<ClassA>?
- 13. 如何列表<ClassB>分配給二傳手這需要列出<ClassA>和ClassB擴展ClassA的
- 14. OOP初學者:classB擴展classA。 classA已經是對象。在classB中需要的方法.. etc
- 15. Qt的:通過C類從ClassA的傳遞變量ClassB的
- 16. JavaScript模式:將ClassA屬性「複製」到ClassB
- 17. 發送NSNotification在observeValueForKeyPath
- 18. NSNotification發送一次,但多次收到
- 19. 如何獲得ClassA中的第一個ClassB?
- 20. C# - 如何傳遞ClassA的屬性作爲ClassB的參數?
- 21. 使用ClassB的對象創建ClassA的對象
- 22. 在ClassA中設置變量和在ClassB中查看
- 23. 如何定義和使用ClassA的集合的ClassB的
- 24. C++類繼承設置「classA」數據成員等於「ClassB」
- 25. Swift3,如何調用ClassA類函數ClassB的的init()
- 26. 如何在另一個類(ClassB)內實例化一個類(ClassA)並將ClassA對象用作JavaScript中ClassB的屬性?
- 27. 發送一個NSNotification之間的意見
- 28. NSNotification永遠不會被髮送
- 29. 如何在NSNotification中發送對象?
- 30. 如果我有兩個類:ClassA和ClassB,我應該爲其他測試代碼
不工作:( – JonasG
應該。你不需要更多的運行的通知。如果CLASSA更新一些數據,確保這些變化反映在ClassB的,你也可以用通知給ClassB的一個值,但'reloadData'會讓tableView再次詢問它的數據源。 – 2011-07-25 11:49:25
好了, - (void)updated {[self.tableView reload data];}在通知發送時不會被調用,請檢查你的代碼,我試圖修改代碼,但它並沒有幫助 – JonasG