2011-06-04 116 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