将NSString添加到NSMutableArray会替换先前的NSString

时间:2012-07-27 10:32:10

标签: iphone objective-c ios xcode nsmutablearray

我基本上是想在ViewWillAppear

中使用此代码向我的NSMutableArray添加一个新字符串
    NSUserDefaults *favBooksDefaults = [NSUserDefaults standardUserDefaults];
    self.favBook = [favBooksDefaults stringForKey:@"favBook"];
    self.favBookList = [[NSMutableArray alloc]init];
    [self.favBookList addObject:favBook];

当然,当我这样做时,我想保留Array中存在的所有先前字符串。因为当我为NSUserDefaults添加一个新字符串然后再添加到Array时,它只是替换旧字符串。

为什么这样,我如何保存所有对象? 提前谢谢。

4 个答案:

答案 0 :(得分:1)

当您分配并初始化一个新的NSMutableArray对象时,您将拥有一个没有值的空数组。它没有替代它,因为那里没有什么可以替代的。它只是添加NSSString作为第一个值。这当然会发生在每次分配/初始化NSMutableArray的新实例时。

SOLUTION:使NSMutableArray成为视图控制器的实例变量。 alloc / init一次(例如在viewDidLoad中)。每次调用viewWillAppear时,您都可以添加值而无需重新初始化新的NSMutableArray。

答案 1 :(得分:1)

NSMutableArray *newArray = [[NSMutableArray alloc] initWithArray:oldArray];
[newArray replaceObjectAtIndex:oldObjectIndex withObject:newObject] // if you want to replace oldObject with newObject;
[newArray addObject:newObject] // if you want to add object to the array;

如果我做得对,你想用新的对象替换旧对象吗?

答案 2 :(得分:1)

NSUserDefaults *favBooksDefaults = [NSUserDefaults standardUserDefaults];
self.favBook = [favBooksDefaults stringForKey:@"favBook"];
if ([self.favBookList indexOfObject:self.favBook] != NSNotFound) {
    [self.favBookList addObject:favBook];
}

您还应该使用viewDidLoad方法初始化您的favBookList:

self.favBookList = [NSMutableArray array];

答案 3 :(得分:1)

布朗先生的回答是正确的:

在头文件中,将favBookList声明为属性,并包含一个书籍添加方法:

@interface yourViewController : UIViewController {
NSMutableArray *favBookList;
}

-(void)addBook;

@property (nonatomic, retain) NSMutableArray *favBookList;

在viewDidLoad方法中,初始化favBookList。别忘了@synthesize!

-(void)viewDidLoad {
self.favBookList = [[NSMutableArray alloc] init];
[super viewDidLoad];
}

现在,您可以随时从用户默认设置中添加图书。

-(void)addBook{
self.favBook = [[NSUserDefaults standardUserDefaults] stringForKey:@"favBook"];
[favBookList addObject:favBook]; 
}