【发布时间】:2011-11-03 22:42:03
【问题描述】:
更新后如何访问@public NSArray 或NSMutableArray?从一个班级到另一个班级?
我可以在程序启动时调用-(id)init.. 来访问它,但如果我想稍后更新它,我会得到零。有什么问题?
简单示例代码:
MyFirstClass.h
#import <Foundation/Foundation.h>
@interface MyFirstClass : NSObject
{
@public
NSArray *testArray;
}
-(IBAction)Button:(id)sender;
@end
MyFirstClass.m
#import "MyFirstClass.h"
@implementation MyFirstClass
- (id)init {
if (self = [super init]) {
//I can take this Array from here
//testArray = [NSArray arrayWithObjects: @"first", @"second", @"third", nil];
}
return self;
}
-(IBAction)Button:(id)sender {
//How take this Array?
testArray = [NSArray arrayWithObjects: @"first", @"second", @"third", nil];
}
@end
SimpleClass.h
#import <Foundation/Foundation.h>
#import "MyFirstClass.h"
@interface SimpleClass : NSObject
{
MyFirstClass *other;
}
-(IBAction)ButtonGet:(id)sender;
@end
SimpleClass.m
#import "SimpleClass.h"
#import "MyFirstClass.h"
@implementation SimpleClass
-(IBAction)ButtonGet:(id)sender {
other = [[MyFirstClass alloc] init];
if(other->testArray) {
NSLog(@"Working!");
}
else { NSLog(@"Not working!"); }
}
@end
创建的示例在 *.xib 中有两个按钮。一个名为“Button”(MyFirstClass)的按钮和另一个名为“ButtonGet”(SimpleClass)的按钮。所以当程序启动时需要按下“Button”然后“ButtonGet”,之后 NSLog 应该写“Working!”如果它得到 testArray,如果没有 - “不工作!”。它总是显示“不工作!”。
【问题讨论】:
-
请编辑您的问题并将代码发布在您声明实例变量的位置、为它分配数组实例的位置以及您尝试使用它的位置。另外,您是在使用垃圾收集、ARC 还是手动内存管理?
-
感谢您的评论,我没有使用垃圾回收,我使用的是手动内存管理。
-
在
awakeFromNib中放置一个断点,然后在调试器面板中右键单击testArray并选择“监视变量”。这样,下次修改变量时,调试器将暂停您的程序。 -
@zneak 对不起,我犯了一个错误,它不是用 awakeFromNib 工作的。它只是用 - (id)init {...} 工作的。也许你知道为什么?回来可能有什么问题?
标签: xcode macos cocoa xcode4 osx-lion