2016-10-20 3 views
0

Может быть, кто-то может мне помочь. Я просто не ошибаюсь. У меня есть простое приложение с TableView. В этой таблице View представлено много разных вещей. Когда пользователь нажимает на ячейку, он добирается до ViewController, где может видеть разные картинки и объяснения для выбранной ячейки (например, он нажимает на ячейку с именем Dog init, поэтому он будет видеть картинки и объяснения для собак). Для каждой «вещи» я создал собственный класс. Так, например, у меня есть классные собаки, кошки, машины .... В каждом классе я создал массив с изображениями и текстовыми файлами, который возвращается в TableViewController.Как поместить объект в массив?

Я создал различные объекты класса в TableViewController:

#import "IphoneTabelle.h" 
#import "ViewController.h" 
#import "Dogs.h" 
#import "Cats.h" 

@interface IphoneTabelle() 


@end 


@implementation IphoneTabelle 


- (void)viewDidLoad { 
    [super viewDidLoad]; 

    /
    //create dog object for array 
    Dogs *dogClass = [[WLAN alloc]init]; 
    _createdClassObjectArrayPics = dogClass.picsDogs; 
    _createdClassObjectArrayText = dogClass.textDogs; 



    //Cat objects created for array 

    Cats *catClass = [[ControlCenter alloc]init]; 
    _createdClassObjectArrayPics = catClass.picsCats; 
    _createdClassObjectArrayText = catClass.textCats; 


    //create objects if they dont exists 
    if (!_objects){ 
     _objects = [[NSMutableArray alloc] init]; 
    } 


    //put the class-objects array in objects array 
    [_objects addObject:NSStringFromClass([dogClass class])]; 

    [_objects addObject:NSStringFromClass([catClass class])]; 

Так Венна пользователь нажимает на Cell используется переход. Изображения и тексты должны быть помещены в массив из ViewController.h. Эти массивы используются для отображения изображений и текстов в ViewController.

Segue Код

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    ViewController *sendDataToViewController = segue.destinationViewController; 

    NSIndexPath *indexPath = nil; 
    NSArray *picturesArrayTableView = [[NSArray alloc]init]; 
    NSArray *texteArrayTableView = [[NSArray alloc]init]; 


    if([segue.identifier isEqualToString:@"show"]){ 


     picturesArrayTableView = _createdClassObjectArrayPics[indexPath.row]; 
     texteArrayTableView = _createdClassObjectArrayText[indexPath.row]; 


    //picsArray and textsArray are declared in ViewController.H file 
     sendDataToViewController.picsArray= picturesArrayTableView; 
     sendDataToViewController.textsArray = texteArrayTableView; 



    } 

Поэтому, когда пользователь нажимает на мобильный, я получаю сообщение об ошибке каждый раз, когда: 'NSInvalidArgumentException', причина: «- [__ подсчитывать NSCFConstantString]: непризнанные селектор направил к экземпляру 0x10becc198 '

Каким-то образом данные с картин и текстов не находятся в изображенияхArrayTableView и texteArrayTableView.

Как я могу получить работу только с одним сеансом? Я не хочу делать segue для каждой ячейки/объекта. Этот способ действительно действовал бы, но это действительно раздражает и беспорядочно, чтобы создать сотни сегментов.

Надеюсь, что смогу прояснить свой вопрос.

+0

что это за собака.Клиенты возвращаются? –

+0

'_createdClassObjectArrayPics' всегда будет иметь последний добавленный объект. В вашем случае это catClass.picsCats. – Mahesh

+0

Различные классы возвращают массив для изображений и массив для текстов. – podoi17

ответ

0

Создать класс собаки следующим образом:

@interface Dog : NSObject 

@property (nonatomic, strong) NSMutableArray *pics; 
@property (nonatomic, strong) NSMutableArray *texts; 


@end 

Создание объектов и добавление его в массив

Dog *dogObject=[[Dog alloc]init]; 

dogObject.pics = [[NSMutableArray alloc]init]; 
dogObject.texts = [[NSMutableArray alloc]init]; 

//Add some Pics to dog 
[dogObject.pics addObject:[UIImage imageNamed:@"dog.png"]]; 
//or you can add objects from another array 

//Add Text for that pic 
[dogObject.texts addObject:@"Cute Dog"]; 

//Note that Pics and text array will have same count 



//create objects if they dont exists 
if (!arrObject){ 
    arrObject = [[NSMutableArray alloc] init]; 
} 

[arrObject addObject:dogObject]; 

При нажатии таблицы

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"Show" sender:indexPath]; 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 

    if([segue.identifier isEqualToString:@"Show"]) 
    { 
     //getting indexpath for selected Item 
     NSIndexPath *indexPath = (NSIndexPath *)sender; 
     id selectedObject=[arrObject objectAtIndex:indexPath.row]; 

     //getting View Controller 
     ViewController *sendDataToViewController = segue.destinationViewController; 

     //pass selected item to destingation View Controller 
     sendDataToViewController.selectedItem = selectedObject; 
    } 


} 

Поймать переданный объект в вашем контроллере подробного представления. Для этого вам нужно создать класс Property in Detail ViewController.

@property (nonatomic, strong) id selectedItem; 

Теперь вы можете получить доступ к фотографиям и текстам этого объекта.

 if ([selectedItem isKindOfClass:[Dog class]]) 
     { 
      // we got the dog object 
      Dog *dogObject =(Dog *)selectedItem; 

      //access Pics Like follow 

      UIImage *image = [dogObject.pics objectAtIndex:0]; 
      NSString *text = [dogObject.texts objectAtIndex:0]; 

     } 
     else [selectedItem isKindOfClass:[Cat class]] 
     { 
      //Same above Thing 
     } 

Это просто пример, вы можете использовать все по своему усмотрению.

+0

oh приятно спасибо, я постараюсь реализовать его – podoi17

+0

Итак, я попытался реализовать это в своем коде.Когда я запускаю код в симуляторе, я получаю следующую ошибку: – podoi17

+0

2016-10-20 19: 37: 45.763 HowToIphone [5898: 4944908] объекты в _объектах ( "", " » ) 2016-10-20 19: 37: 45,770 HowToIphone [5898: 4944908] - [WLAN isEqualToString]: непризнанные селектор направлен например 0x600000246e10 я подумал, что существует проблема с массивом объектов, поэтому оператор журнала. У меня такое ощущение, что ошибка b/c, массив объектов не знает, что писать в cellLables. Но, может быть, я совершенно не прав, и ошибка в другом месте – podoi17