我基本上是想在ViewWillAppear
NSUserDefaults *favBooksDefaults = [NSUserDefaults standardUserDefaults];
self.favBook = [favBooksDefaults stringForKey:@"favBook"];
self.favBookList = [[NSMutableArray alloc]init];
[self.favBookList addObject:favBook];
当然,当我这样做时,我想保留Array中存在的所有先前字符串。因为当我为NSUserDefaults添加一个新字符串然后再添加到Array时,它只是替换旧字符串。
为什么这样,我如何保存所有对象? 提前谢谢。
答案 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];
}