0

storeクラス内にカプセル化された配列からのデータが入力されるはずのテーブル ビュー コントローラーがあります。テーブルは、メソッドを介して各セクションに含まれる行数を知る必要がありますtable:numberOfRowsInSection:。このメソッドでは、 のインスタンス内にある配列のサイズを返す必要がありますstore。最初はstoreシングルトンを作成してこれを行いましたが、これは非効率的であり、NSNotificationCenter を使用する方がよいと言われました。

私の知る限り、NSNotificationCenter が行うことは、別のオブジェクトが特定の通知を投稿したときに、特定のオブジェクトのメソッドをトリガーすることだけです。NSNotificationCenter を使用して配列のサイズをテーブル ビュー コントローラーに送信するにはどうすればよいですか?

4

3 に答える 3

2

次のように実行できます。

...
// Send 
[[NSNotificationCenter defaultCenter] postNotificationName: SizeOfRrrayNotification
                                                    object: [NSNumber numberWithInteger: [array count]]];

...
// Subscribe
[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(sizeOfArray:)
                                             name: SizeOfRrrayNotification
                                           object: nil];

// Get size
- (void) sizeOfArray: (NSNotification*) notification
{
    NSNumber* sizeOfArray = (NSNumber*) notification.object;
    NSLog(@"size of array=%i",  [sizeOfArray integerValue]);
}
于 2013-06-24T03:39:11.627 に答える
0

配列のサイズを計算する方法:

<------通知送信側---------->

-(void)sizeOfArray{
   int size = [myArray count];
   NSMutableString *myString = [NSMutable string];
   NSString *str = [NSString stringwithFormat:@"%d",size];
   [myString apprndString:str];

//It is to be noted that NSNotification always uses NSobject hence the creation of mystring,instead of just passing size

   [[NSNotificationCenter defaultCenter] postNotificationName:@"GetSizeOfArray"      object:myString];
}

通知を投稿したら、データを送信するコントローラーの viewDidLoad メソッドにこれを追加します

<--------通知受信側---------->

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

//The selector method should always have a notification object as its argument

 [super viewDidLoad];

}


- (void)get_notified:(NSNotification *)notif {
    //This method has notification object in its argument

    if([[notif name] isEqualToString:@"GetSizeOfArray"]){
       NSString *temp = [notif object];
       int size = [temp int value];

       //Data is passed.
        [self.tableView reloadData];  //If its necessary 

     }    
}

お役に立てれば。

于 2013-06-26T06:00:20.807 に答える