Отображение файлов из каталога документов в UITableView — минимум iOS5

Я пытаюсь настроить UITableView, который отображает данные из каталога документов.

Я немного потерялся в коде, так как я пробовал много примеров из Google, форумов и т. Д.

Я создаю свое приложение без раскадровки, поэтому все в коде.

У меня отображается UITableView, поэтому установлены делегаты и DataView - мне просто нужен контент.

У меня есть этот код, чтобы показать вам, но он не показывает никаких данных:

- (void)viewDidLoad
  {
    [super viewDidLoad];

    _firstViewWithOutNavBar = [[UIView alloc] init];
    _firstViewWithOutNavBar.frame = CGRectMake(self.view.frame.origin.x, 0, self.v  iew.frame.size.width, self.view.frame.size.height);
    _firstViewWithOutNavBar.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:_firstViewWithOutNavBar];

    UITableView *tableView = [[UITableView alloc] init];
    tableView.frame = CGRectMake(self.view.frame.origin.x, 0,     self.view.frame.size.width, self.view.frame.size.height);
    tableView.delegate = self;
    tableView.dataSource = self;
    [_firstViewWithOutNavBar addSubview:tableView];
  }

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  {
    //alloc and init view with custom init method that accepts NSString* argument
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:indexPath.row];
    NSString*pathToPass = [documentsDirectory stringByAppendingPathComponent:
                       [tableView cellForRowAtIndexPath:indexPath].textLabel.text]; //pass this.

    NSLog(@"%@", pathToPass);

//_nsarray = [[NSArray alloc] initWithContentsOfFile:pathToPass];


  }

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  {
      return [_nsarray count];
      NSLog(@"%@", _nsarray);
   }

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:   (NSIndexPath *)indexPath
   {
     static NSString *CellIdentifier = @"Cell";

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
      if (cell == nil) {
          cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }

      cell.textLabel.text = [NSString stringWithFormat:@"%@",[_nsarray  objectAtIndex:indexPath.row]];

      return cell;
        }

Любая помощь будет здорово.


person jwknz    schedule 29.09.2012    source источник


Ответы (2)


Массив _nsarray, который используется в качестве источника данных табличного представления в numberOfRowsInSection и cellForRowAtIndexPath, никогда не инициализируется в вашем коде. Вы должны сделать что-то вроде

NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
_nsarray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:docPath error:NULL];

in viewDidLoad.

person Martin R    schedule 29.09.2012

Вы разместили точки останова в методе numberOfRowsInSection, чтобы проверить, был ли вызван этот метод или нет. Как я вижу в вашем коде, вы не инициализировали свой _nsarray и не добавляли никаких объектов в этот массив. Таким образом, в основном ваш массив содержит 0 объектов, поэтому строка не будет создана. В вашем методе numberOfRowsInSection вы поместили nslog после оператора return, и он никогда не будет выполнен, пожалуйста, поместите его перед оператором return, чтобы вы могли видеть значения массива. Я надеюсь, что это поможет вам.

person prakhar    schedule 29.09.2012
comment
Спасибо комментарий помог :-) - person jwknz; 30.09.2012