Установить значение свойства в главном контроллере представления из динамически создаваемого класса (target-c) - PullRequest
1 голос
/ 22 июня 2011

У меня совершенно нет идей по этому поводу ... Я пробовал так много вариантов, что у меня кружится голова ...

У меня есть основной UIViewController, который одним нажатием кнопки добавляет еще один UIViewController к одному из его подпредставлений. Когда динамический UIVC добавляется, свойство в основном UIVC обновляется, чтобы содержать ссылку на него (называемое currentObject). Это работает нормально.

Проблема, с которой я столкнулся, заключается в том, что, если я добавляю еще один динамический UIVC, свойство, содержащее ссылку, изначально корректно обновляется, но независимо от того, что я пытаюсь, я не могу получить свойство для обновления при касании первого динамического UIVC , Все, что я пытаюсь установить "currentObject" из динамического UIVC, выдает ошибку "нераспознанный селектор, отправленный в класс", а затем выдает ошибку.

Вначале я воздерживаюсь от размещения кода в этом посте. Не уверен, что я буду публиковать это было бы полезно.

Заранее спасибо!

Изменено:

в DynamicModuleViewController.h:

@interface DynamicModuleViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIPopoverControllerDelegate, UIGestureRecognizerDelegate, UITextViewDelegate, UIApplicationDelegate, MFMailComposeViewControllerDelegate>{

DynamicModule *currentObject;

}

@property(nonatomic, retain) DynamicModule *currentObject;

в DynamicModuleViewController.m:

@implementation DynamicModuleViewController

@synthesize currentObject;

-(void)addObject:(id)sender
{
DynamicModule *dm = [[DynamicModule alloc]init];
// positioning and PanGesture recognition code to allow dragging of module
currentObject = dm;
[mainView addSubview:currentObject.view];
}

@end

при добавлении таким образом, от нажатия кнопки, он работает нормально.

После того, как будет создан еще один DynamicModules, мне нужно обновить currentObject с помощью DynamicModule, который был нажат последним.

Ответы [ 2 ]

1 голос
/ 22 июня 2011

добавляет еще один UIViewController к одному из его подпредставлений

Прежде всего, это красный флаг для меня. Добавление представления UIViewController в качестве подпредставления почти всегда является неправильным способом управления иерархией представлений и распространенной ошибкой в ​​приложениях для iOS. Пожалуйста, смотрите http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/, чтобы я мог оставаться в теме и не повторяться.

currentObject = dm;

Устанавливает ivar напрямую для вашего свойства currentObject. Вы пропускаете предыдущее значение currentObject. Похоже, вы не удаляете предыдущее представление currentObject из mainView. Я подозреваю, что вы устанавливаете currentObject для автоматически выпущенного объекта, не сохраняя его, потому что вы обошли свой установщик, и в конечном итоге пытаетесь отправить сообщение освобожденному объекту, что приводит к ошибке «нераспознанный селектор», когда ваше сообщение достигает любого другого объект теперь занимает этот адрес памяти или ошибку BAD_ACCESS, когда вы пытаетесь сослаться на объект, который больше не существует.

self.currentObject = foo эквивалентно [self setCurrentObject:foo] и, вероятно, соответствует вашим ожиданиям.

0 голосов
/ 22 июня 2011

А как насчет использования шаблона делегата?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...