0

作成されたクラスとは異なる既存のクラスから NSMutableArray にアクセスしようとしていますが、NSLog を実行すると null になります。私のプログラムは class2 で起動し、次に class1 に移動し、1 つ以上の行を押して NSMutableArray を作成し、次に class2 に更新された NSMutableArray インスタンスを取得させたいのですが、取得されるのは null だけです。以下のコード:

//class1.m

#import "FocusTagTableViewController.h"
#import "STATableViewController.h"

@implementation FocusTagTableViewController

@synthesize focusArray = _focusArray;
@synthesize allSelectedFocus = _allSelectedFocus;

- (void)viewDidLoad
{
_focusArray = [[NSArray alloc]initWithObjects:@"Balance",@"Bevægelse",@"Elementskift",@"Vejrtrækning",@"Alle",nil];

[super viewDidLoad];

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *selectedFocus = [[_focusArray objectAtIndex:indexPath.row] stringByAppendingString:@","];
if(_allSelectedFocus == nil)
{
    _allSelectedFocus = [[NSMutableArray alloc]init];
    [_allSelectedFocus addObject:selectedFocus]; 
}
else if(![_allSelectedFocus containsObject:selectedFocus])
{
    [_allSelectedFocus addObject:selectedFocus];
}
}

//class2.m

#import "STATableViewController.h"
#import "FocusTagTableViewController.h"

@implementation STATableViewController
- (void)viewDidLoad
{
[super viewDidLoad];

 FocusTagTableViewController *focusTag = [[FocusTagTableViewController alloc]init];

[focustag addObserver:self forKeyPath:@"allSelectedFocus" options:NSKeyValueObservingOptionNew context:NULL];
}

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keyPath isEqualToString:@"allSelectedFocus"])
{
    NSLog(@"%@", [object valueForKeyPath:keyPath]);
}
}
4

2 に答える 2

2

これは、クラス 2 で空の配列を持つクラス 1 の新しいインスタンスを作成するためです。クラス 2 からその配列にアクセスする場合は、その最初のクラスへの参照を作成する必要があります。または、そのために Key-Value-Observing を使用できます。

KVO http://developer.apple.com/library/mac/ipad/#documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.htmlに関するドキュメントは次のとおりです。

最初のクラスでは、クラス 2 を作成するときに、その配列のオブザーバーとしてselfを追加し、クラス 1 にobserveValueForKeyPath:メソッドを実装します。

于 2012-04-21T17:17:39.397 に答える
0

この方法を試してください:

1)class2.hファイルをclass1ファイルにインポートします。

2)NSMutableArray *fooclass2.hファイルにグローバルに作成します

3)class1ファイルにclass2のオブジェクトを作成します

allSelectedFocus4) class1ファイルで使用する代わりに、オブジェクトをfooそのファイル自体で次のように設定します[class2Object.foo addObject:selectedFocus];

于 2012-04-21T17:40:39.640 に答える