只是一个简单的问题。我有一个在我的applicationDidFinishLaunching方法中生成的NSArray,但由于某种原因,该数组未被其他方法使用,并且它表示它未被使用。
-(void)applicationDidFinishLaunching... {
NSArray* songsArray = [root nodesForXPath:@".//dict/dict/dict" error:nil];
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn... {
for(NSXMLElement* song in songsArray) {
我已经在头文件中声明了变量。
干杯, 斯科特
答案 0 :(得分:2)
您可能在标头中声明了songsArray
,但未在-application:didFinishLaunching:
中进行分配。相反,您已经创建了一个具有相同名称的局部变量,该变量仅在方法结束之前保留在范围内。像这样分配你的ivar:
songsArray = [root nodesForXPath:@".//dict/dict/dict" error:nil];
答案 1 :(得分:1)
您正在方法的范围内创建songsArray
,您需要将其添加为类变量,如下所示:
<强> MyApplication.h 强>
@interface MyApplication {
NSArray *songsArray;
}
<强> MyApplication.m 强>
- (void)applicationDidFinishLaunching… {
songsArray = [[root nodesForXPath:@".//dict/dict/dict" error:nil] retain];
}
- (void)dealloc {
[songsArray release];
songsArray = nil;
}
注意,您还需要retain
,以便在排空NSAutoReleasePool
时不会自动释放数组。
答案 2 :(得分:0)
您已将songsArray
声明为本地变量,但在applicationDidFinishLaunching
之外无法显示。
如果您已在标题中声明了变量,则只需指定它:
-(void)applicationDidFinishLaunching... {
songsArray = [root nodesForXPath:@".//dict/dict/dict" error:nil];
关于内存管理的注意事项:
如果你没有使用ARC,你还需要retain
你的数组,否则它将在applicationDidFinishLaunching
结束时自动释放,你的变量将指向一个释放的内存,你的应用程序将崩溃
不要忘记在release
dealloc
{再次,如果你不在ARC的土地上)。