Правилният начин да предадете обект на оглед?

аз съм малко нов в разработката на iphone. Направих го, за да разработя хубаво приложение, което зарежда XML данни от емисия, показва тези данни в UITableView и ако потребител докосне ред, трябва да има подробен изглед, който показва данните.

Тук закъсах малко. Не ми е ясно как да предам данните от избрания от потребителя запис в моя подробен изглед. Detail-View се извиква чрез presentModalView...

Замислих се за:

  1. Извикване на функция "setDetails:(PostingData *)myPosting" на viewController на моя подробен изглед.

  2. представяне на detailView на потребителя чрез извикване на presentModalViewAnimated.

Изгледът е представен, но функцията setDetails: се срива без никакъв изход към конзолата за отстраняване на грешки.

ВЪПРОСЪТ МИ:

Кой е правилният начин за предаване на данни (в потребителски обекти като екземпляр на самостоятелно написан клас) от моя контролер на изглед към контролер на изглед, който трябва да показва подробни данни.

Всеки съвет или помощ се оценява. Не мога да ви платя за вашата помощ, но съм на път да стана по-добър и след това да помагам и на другите :-).


person MadMaxAPP    schedule 21.12.2010    source източник


Отговори (2)


  1. дефинирайте персонализирания обект във вашия клас. @property(nonatomic, retain) MyClass * myClass;
  2. заредете емисията в NSMutableDictionary и я предоставете на вашия клас
[YOUR_VIEW_CONTROLLER *yourViewController = [[YOUR_VIEW_CONTROLLER alloc] init];
yourViewController.PROPERTY_DEFINED_BEFORE = yourObject;
[view addSubview:yourViewController.view];
[yourViewController release];

наздраве

person endo.anaconda    schedule 21.12.2010

Метод 1: Прехвърлете го в персонализиран init метод

Във вашия заглавен файл декларирайте свойство

@property (nonatomic, retain) id myDataObject;

И във вашата реализация използвайте персонализиран init като този

 -(id)initCustom:(id)myObject;
    if(self = [super init]) {
        myDataObject = [myObject retain];
    }
    return self;
  }

Метод 2: Използвайте свойство

Използвайте @property във вашия Header и @synthesize във вашия .m файл за изпълнение

   [CustomUIViewController* newViewController = [[CustomUIViewControlleralloc] init];
   newViewConroller.myDataObject = myObject;
   [view addSubview:newViewController.view];
   [newViewController release];
person Henrik P. Hessel    schedule 21.12.2010
comment
Първият начин пропуска задържане на повикване. - person Marcio; 21.12.2010
comment
Добре. Това работи като чар с метод 1. Но има едно нещо, което създава проблеми. Подробният изглед вече е отворен и мога да покажа данните. Ако се опитам да осъществя достъп до обекта от IBAction, което се извиква от докосване на бутон, получавам EXC_BAD_ACCESS. Трябва ли да предам обекта на моя метод initCustom по специален начин? - person MadMaxAPP; 21.12.2010
comment
използвахте ли @property (nonatomic, retain) ..това трябва да запази вашия обект веднъж - person Henrik P. Hessel; 21.12.2010
comment
да направих го. в @interface задания *theJob и в извън интерфейс @property (nonatomic, retain) задания *theJob; А също и в .m - Файл на @synthesize theJob; - person MadMaxAPP; 21.12.2010
comment
ах .. добре .. за да разбера това означава, че viewController поставя +1 към броя на задържането, за да предотврати освобождаването на myObject от viewController, който инициализира detailView? - person MadMaxAPP; 21.12.2010
comment
Добре. Благодаря. не трябва да обработвам myObject след това никъде? броят на запазване се намалява автоматично, ако viewController за детайлния изглед е освободен? - person MadMaxAPP; 21.12.2010
comment
извикайте [myObject release] във вашия метод dealloc - person Henrik P. Hessel; 21.12.2010