0

我正在尝试从与创建它的不同的现有类访问 NSMutableArray。但如果我 NSLog 它,我会得到空值。我的程序在 class2 中启动,然后我转到 class1,通过按一行或多行创建我的 NSMutableArray,然后我希望我的 class2 获取更新的 NSMutableArray 实例,但它得到的只是空值。下面的代码:

//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)在你的class1文件中导入你的class2.h文件。

NSMutableArray *foo2)在你的class2.h文件中创建一个全局

3)在你的class1文件中为class2创建一个对象

4)而不是allSelectedFocus在你的class1文件中使用,foo像这样在该文件本身中设置对象[class2Object.foo addObject:selectedFocus];

于 2012-04-21T17:40:39.640 回答