UITableView - загрузка данных из NSUserDefaults - PullRequest
1 голос
/ 04 января 2012

Я довольно новичок в программировании с помощью xCode. Я пытаюсь понять основы, читая книги / учебные пособия и так далее. Но иногда даже те не могут помочь. И даже при том, что я всегда вижу проблему в том, чтобы выяснить, где ошибка или что делать, я озадачен этим.

Я создал обычный UITableView. Я хочу, чтобы пользователь вводил информацию в трех разных UITextFields, которые все сохраняются в NSUserDefaults. При этом он сохраняет их правильно, и я могу загрузить их в обычную метку.

Но я хочу, чтобы он отображался в одной ячейке (вместе с именем пользователя, которое должно быть сохранено навсегда, чтобы ему не приходилось вводить его снова и снова). Поэтому, когда пользователь вводит данные, они сохраняются в NSUserDefaults, и всякий раз, когда он переключается на TableView, они отображаются в первой строке.

(Например) Я пытался ответить Кэмерон Спикертс Загрузка данных в NSUserDefaults (изменил его для моих потребностей ofc). Но я не могу заставить его работать. Может быть, потому что он использует гораздо более старую версию xCode? Буду очень признателен, если кто-нибудь сможет мне помочь с этой проблемой.

Код из .m файла:

 @synthesize tableViewArray;



 - (void)viewDidLoad
{
   [super viewDidLoad];

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[self.UserData arrayWithObjects:[prefs objectForKey:@"hello"], [prefs objectForKey:@"ha
ello2"], [prefs objectForKey:@"hello3"] nil];


 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

return [tableViewArray count];
   }

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  {
   static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.textLabel.text = [NSString stringWithFormat:@"%@ %@ %@", [self.UserData objectAtIndex:0], [self.UserData objectAtIndex:1], [self.UserData objectAtIndex:2] ];

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  {

    NSString *message = [NSString stringWithFormat:@"You selected %@",[tableViewArray objectAtIndex:indexPath.row]];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" 
                                                    message: message delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil];
    [alert show];

}

Ответы [ 2 ]

2 голосов
/ 04 января 2012

Вы должны реализовать несколько методов UITableViewDelegate и UITableViewDataSource.Для этого убедитесь, что вы используете подкласс UITableViewController или ваш ViewController соответствует этим протоколам.Например:

@interface MyViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

Например, вы сохраняете свои данные из свойства NSUserDefaults в self.userData, которое является массивом.Вы должны заполнить это NSArray, например, в своем методе -viewDidLoad.

Затем убедитесь, что реализованы следующие методы:

// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

// Set up the number of rows
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.userData count];
}

Реализация следующего метода зависит от вашей iOSверсия, в iOS5 вы напишите это:

// Then fill the cells with data
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.textLabel.text = [self.userData objectAtIndex:indexPath.row];
}

Затем следует несущественные в вашем случае методы UITableViewDelegate, вы можете определить их позже.

Убедитесь, что у вас есть правильные привязки в конструкторе интерфейсов или раскадровках.Выходы delegate и dataSource вашего tableViews должны быть привязаны к вашему ViewController.

Надеюсь, это поможет.Это поможет мне ответить точно по существу, если вы покажете мне свой код.

1 голос
/ 04 января 2012

Хорошо, ответьте на

Как хранить данные в self.UserData?

Это действительно легко. Как это:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:_value forKey:@"yourUserDefaultsEntryName"];

Вы можете прочитать это тогда

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[self.UserData arrayWithObjects:[prefs objectForKey:@"yourUserDefaultsEntryName"], [prefs objectForKey:@"yourAnotherUserDefaultsEntryName"], nil];

Надеюсь, это поможет.

...