2011-06-04 122 views
1

我是XCode的初学者。NSMutableArray中的addObject不起作用

以下是我的代码。我想添加一个对象到一个可变阵列。在调试器窗口中,我可以看到有一个对象被添加到数组“单词”中。我还可以看到该对象的属性“标志”为“否”。问题是另一个属性“str”显示为“超出范围”。

任何人都可以帮助我解决这个问题吗?感谢loooooot!整个下午都陷在这一次。

NSMutableArray * words=[[NSMutableArray alloc] initWithCapacity:numberOfWords]; 

Word *w=[[Word alloc] init];  

[w setStr:@"abc" flag:NO]; 

[words addObject: w]; 

[w release]; 

-

@interface Word : NSObject{ 
    NSString *str; 
    BOOL flag; 
} 

-(void) setStr: (NSString *) s flag:(BOOL) b 
{ 
    self.str=s; 
    flag=b; 
} 

回答

1

你有你的字符串中的财产申报?你保留你正在设置的字符串吗?

AFAIK'超出范围'并不一定意味着它没有设置或没有设置任何东西。尝试NSLog的值或东西。你可能会发现没有错。

看一看这个问题,大约在范围会谈GDB:

Objective-C: instance variables out of scope in debugger

+0

感谢您的答复。声明是“@property(nonatomic,copy)NSString * str” – Lynn 2011-06-04 05:42:22

+0

你是对的。我的代码应该没问题。它在调试器窗口范围之外,但我正确显示它。非常感谢您的快速回复。 – Lynn 2011-06-04 05:57:25

0

你的问题是,串@"abc"是临时对象是谁的范围仅在[w setStr:@"abc" flag:NO]方法调用期间存在。您应该能够通过使strWord一个@property来解决这一问题:

@interface Word : NSObject{ 
    NSString *str; 
    BOOL flag; 
} 
@property (retain) NSString* str; 
@end 

而且在实现文件

@implementation Word 
@synthesize str; 
-(void) setStr: (NSString *) s flag:(BOOL) b 
{ 
    self.str=s; 
    flag=b; 
} 
@end