1

我基本上是在尝试使用此代码向我的 NSMutableArray 添加一个新字符串ViewWillAppear

    NSUserDefaults *favBooksDefaults = [NSUserDefaults standardUserDefaults];
    self.favBook = [favBooksDefaults stringForKey:@"favBook"];
    self.favBookList = [[NSMutableArray alloc]init];
    [self.favBookList addObject:favBook];

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

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

4

4 回答 4

1

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

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

于 2012-07-27T10:39:17.347 回答
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;

如果我做对了,您想用新对象替换旧对象吗?

于 2012-07-27T11:00:06.637 回答
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];
于 2012-07-27T11:01:11.827 回答
1

Br.先生的回答是正确的:

在您的头文件中将 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]; 
}
于 2012-07-27T16:02:36.230 回答