Я использую SQLite, и я хочу сохранить текстовые поля имени, адреса и телефона, чтобы они отображались в следующем контроллере представления, когда «показать детали» нажмите кнопку в 1-м VC.массив не пуст, но все еще получает индекс ошибки 0
Я разместил кнопку «Сохранить» и «Показать детали» в 1-м VC, а также «предыдущая» и «следующая» кнопка в 2-м VC. Всякий раз, когда я нажимаю «показать детали», я получаю это сообщение об ошибке:
индекс 0 за пределами для пустого массива.
Однако я вижу, что массив не пуст. Я хочу сохранить данные о студенте в массиве.
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *homeDirectory = NSHomeDirectory();
NSString *documentsDirectoryPath = [homeDirectory stringByAppendingPathComponent:@"Documents"];
self.dbFilePathInDocuments = [documentsDirectoryPath stringByAppendingPathComponent:@"details.db"];
self.studentDetails = [[NSMutableArray alloc]init];
NSString *selectQuery = [NSString stringWithFormat:@"select name,address,phone from contacts"];
sqlite3_open([self.dbFilePathInDocuments UTF8String], &dataBase);
sqlite3_prepare_v2(dataBase, [selectQuery UTF8String], -1,&selectStatement, NULL);
while (sqlite3_step(selectStatement) == SQLITE_ROW)
{
NSMutableDictionary *studentDict = [[NSMutableDictionary alloc]init];
NSString *name = [NSString stringWithFormat:@"%s",sqlite3_column_text(selectStatement, 0)];
NSString *address = [NSString stringWithFormat:@"%s",sqlite3_column_text(selectStatement, 1)];
NSString *phone = [NSString stringWithFormat:@"%s",sqlite3_column_text(selectStatement, 2)];
[studentDict setObject:name forKey:@"name"];
[studentDict setObject:address forKey:@"address"];
[studentDict setObject:phone forKey:@"phone"];
[self.studentDetails addObject:studentDict];
NSLog(@"student is:%@",self.studentDetails);
}
sqlite3_finalize(selectStatement);
sqlite3_close(dataBase);
self.nameLabel.text = [[self.studentDetails objectAtIndex:0] valueForKey:@"name"];
self.addressLabel.text = [[self.studentDetails objectAtIndex:0] valueForKey:@"address"];
self.phoneLabel.text = [[self.studentDetails objectAtIndex:0] valueForKey:@"phone"];
currentStudentIndex = 0;
}
- (IBAction)clickPrevious:(id)sender {
if(currentStudentIndex <=0)
{
currentStudentIndex = 0;
}else
{
currentStudentIndex = currentStudentIndex - 1;
}
self.nameLabel.text = [[self.studentDetails objectAtIndex:currentStudentIndex] valueForKey:@"name"];
self.addressLabel.text = [[self.studentDetails objectAtIndex:currentStudentIndex] valueForKey:@"address"];
self.phoneLabel.text = [[self.studentDetails objectAtIndex:currentStudentIndex] valueForKey:@"phone"];
}
- (IBAction)clickNext:(id)sender {
if(currentStudentIndex >= [self.studentDetails count] - 1)
{
currentStudentIndex = [self.studentDetails count] - 1;
}else
{
currentStudentIndex = currentStudentIndex + 1;
}
self.nameLabel.text = [[self.studentDetails objectAtIndex:currentStudentIndex] valueForKey:@"name"];
self.addressLabel.text = [[self.studentDetails objectAtIndex:currentStudentIndex] valueForKey:@"address"];
self.phoneLabel.text = [[self.studentDetails objectAtIndex:currentStudentIndex] valueForKey:@"phone"];
}
Если он говорит, что массив пуст, тогда массив пуст, и вы смотрите на что-то еще, что НЕ пусто. –
Можете ли вы отформатировать код – KrisJones
Показать полный стек и код, на который он ссылается. – trojanfoe