#ios #objective-c #arrays #xcode
#iOS #цель-c #массивы #xcode ( код x ) #xcode
Вопрос:
Сложная формулировка для чего-то относительно простого. Где определяется массив изображений, если он сам является определенным элементом массива?
У меня есть набор массивов, которые передаются через TableView в DetailedViewController. Одним из которых являются изображения. В этом подробном представлении я хотел бы иметь возможность реализовать жест прокрутки в UIImageView, чтобы я мог прокручивать то, что по сути является массивом изображений внутри определенного элемента массива.
Псевдокод:
Array 1:
array1-string1
array1-string2
array1-string3
Array 2:
array2-string1
array2-string2
array3-string3
Array 3:
array3-picture1
array3-picture2
array3-picture3
Каждый массив хранит другой набор данных, соответствующий позиции в массиве. например: Array1
все имена, Array2
все описания, Array3
все изображения.
В detailedView отображается один набор данных. например. array1-string1, array2-string1, array3-picture1.
Поправьте меня, если я ошибаюсь, но для того, чтобы использовать жест салфетки (для определенного набора данных) Мне нужен массив изображений в качестве array3-picture1
элемента.
Буду ли я указывать этот массив при первоначальном объявлении всех массивов, чтобы он был подключен к IBAction в конечном detailedViewController, имея в виду, что это вызывается при определенном переходе к TableView. ИЛИ просто объявите массив как просто массив в начале и укажите его значения где-нибудь в другом месте.
Извините, если это не имеет смысла, но работа с этим занимала мою голову!
Ответ №1:
Я бы начал с рассмотрения этих входных данных, поскольку они еще не находятся в форме объекта. Вы можете создать подкласс NSObject или словарь, объединяющий связанные данные. Например (с использованием словаря):
NSMutableArray *objects = [NSMutableArray array];
NSAssert(array1.count == array2.count == array3.count, @"arrays must be of equal length");
NSInteger count = array1.count;
for (NSInteger i=0; i<count; i ) {
NSDictionary *d = @{ @"name": array1[i], @"description": array2[i], @"image": array3[i] };
[objects addObject:d];
}
Этот массив объектов может быть моделью для вашего табличного представления, возможно, представляя имена на верхнем уровне. После выбора перейдите к подробному представлению, передавая данные следующим образом:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"DetailSegue"]) {
MyDetailViewController *vc = segue.destinationViewController;
NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
vc.object = self.objects[selectedIndexPath.row];
}
}
Затем detail vc выполняет свою работу, ссылаясь на общедоступное свойство, которое, как я предполагал выше, называется object. например:
self.descriptionLabel.text = self.object[@"description"];