без обид, но твой код - большая куча дерьма.
- переменные с именем
something
бесполезны. Период.
- у вас есть переменная с именем что-то в вашем локальном методе. И у вас есть переменная с именем что-то, что является частью вашего класса. Предупреждения «локальные переменные скрывают переменную экземпляра» существуют по причине!
Вероятно, отсюда и все твои проблемы. Я думаю, что вы действительно не понимаете концепцию локальных переменных. Если это так, вы должны прочитать больше об основных вещах Objective-C.
- Вы проверяете, есть ли что-то ноль, и затем вы не изменяете что-то, а выделяете массив. Эти двое не имеют ничего общего друг с другом. Не пишите такой код.
Я исправил это для вас:
- (void)viewDidLoad
{
[super viewDidLoad];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSArray *anArr = [userDefaults objectForKey:@"somedata"];
NSLog(@"anArr::: %@",anArr);
}
-(IBAction)addsomething:(id)sender{
NSMutableArray *array = [[NSMutableArray alloc] init];
NSLog(@"textfieldvalue::: %@", textfield.text);
[array addObject:textfield.text];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:array forKey:@"somedata"];
array = [userDefaults objectForKey:@"somedata"];
// synchronize is only needed while debugging (when you use the stop button in Xcode)
// you don't need this in production code. remove it for release
[userDefaults synchronize];
NSLog(@"array:: %@", array);
}
Однако, скорее всего, вы хотите сохранить объекты в массив, полученный из userDefaults. Это не будет работать с локальными переменными!
Вы бы использовали что-то вроде этого. Но не копируйте это дословно. Попытайтесь понять это и прочитайте больше о локальных переменных.
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
array = [[userDefaults objectForKey:@"somedata"] mutableCopy];
if (!array) {
// create array if it doesn't exist in NSUserDefaults
array = [[NSMutableArray alloc] init];
}
NSLog(@"array in viewDidLoad: %@",array);
NSLog(@"textfieldvalue::: %@", textField.text);
[array addObject: textField.text];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:array forKey:@"somedata"];
// synchronize is only needed while debugging (when you use the stop button in Xcode)
// you don't need this in production code. remove it for release
[userDefaults synchronize];