2011-11-22 27 views
8

Tôi đang cố chuyển đối tượng từ lớp xem chính của mình sang bộ thu thông báo khác trong một lớp khác.Vượt qua đối tượng với NSNotificationCenter để xem khác

Tôi muốn chuyển một đối tượng có tên quốc gia, tải tất cả các thành phố từ một yêu cầu SOAP trong Bộ điều khiển chính và tôi muốn gửi nó đến chế độ xem tiếp theo của tôi.

quốc gia = [[Phân bổ quốc gia] init];

tiêu đề Quốc gia:

@interface Country : NSObject 
{ 
    NSString *name; 
    NSMutableArray *cities; 
} 

@property (nonatomic,retain) NSString *name; 

- (void)addCity:(Cities *)city; 
- (NSArray *)getCities; 
- (int)citiesCount;  
@end 

Tôi tìm thấy một cách để truyền dữ liệu với NSNotificatios đang sử dụng một NSDictionary trong UserInfo. Nhưng nó không thể gửi toàn bộ đối tượng thay vì chuyển đổi sang một NSDictionary? Hoặc cách tốt nhất để chuyển nó là gì? Im bị mắc kẹt cố gắng tìm ra cách để vượt qua các đối tượng.

Thực ra tôi đã làm việc NSNotification đơn giản này trên ứng dụng của mình.

NSNotification trong việc thực hiện chính View Controller:

//---Call the next View--- 
DetailViewController *detail = [self.storyboardinstantiateViewControllerWithIdentifier:@"Detail"]; 
[self.navigationController pushViewController:detail animated:YES]; 

//--Transfer Data to2View 
[[NSNotificationCenter defaultCenter] postNotificationName:@"citiesListComplete" object:nil]; 

NSNotification trong 2View điều khiển thực hiện:

// Check if MSG is RECEIVE 
- (void)checkMSG:(NSNotification *)note { 

    NSLog(@"Received Notification"); 
} 

- (void)viewDidLoad 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(checkMSG:) 
               name:@"citiesListComplete" object:nil]; 

Trả lời

25

oooooo, rất gần. Tôi có một cảm giác bạn không hiểu những gì một NSDictionary là mặc dù.

bài thông báo của bạn với điều này:

Country *country = [[[Country alloc] init] autorelease]; 
//Populate the country object however you want 

NSDictionary *dictionary = [NSDictionary dictionaryWithObject:country forKey:@"Country"]; 

[[NSNotificationCenter defaultCenter] postNotificationName:@"citiesListComplete" object:nil userInfo:dictionary]; 

sau đó nhận được các đối tượng nước như thế này:

- (void)checkMSG:(NSNotification *)note { 

    Country *country = [[note userInfo] valueForKey:@"Country"]; 

    NSLog(@"Received Notification - Country = %@", country); 
} 

Bạn không cần phải chuyển đổi đối tượng của bạn thành một NSDictionary. Thay vào đó, bạn cần gửi NSDictionary với đối tượng của mình. Điều này cho phép bạn gửi nhiều thông tin, tất cả dựa trên các phím trong số NSDictionary, với số NSNotification của bạn.

+0

Cảm ơn! Làm việc như một say mê. Tôi hiểu lầm khái niệm về một NSDictionary nhưng biết rõ hơn về nó. –

+0

Cảm ơn, bạn đời! Tôi đã sử dụng sai phương pháp và tôi đã hoàn toàn nhận được thông báo nhưng không phải là userInfo. Chúc mừng. – Felipe

4

Đối Swift Bạn có thể vượt qua từ điển bằng cách sử dụng mã dưới đây

NSNotificationCenter.defaultCenter().postNotificationName(aName: String, object anObject: AnyObject?, userInfo aUserInfo: [NSObject : AnyObject]?) 

ví dụ

NSNotificationCenter.defaultCenter().postNotificationName("OrderCancelled", object: nil, userInfo: ["success":true]) 

Và đọc từ điển này từ

func updated(notification: NSNotification){ 

     notification.userInfo?["success"] as! Bool 
    } 
Các vấn đề liên quan