0

Моя проблема в том, что я хочу вернуть объект из дочернего представления (контроллера) в родительский вид (контроллер). Я передать объект с вызовом, как это:Передача объекта от дочернего к родительскому

parentView.someObject=objectFromChild;

Все хорошо, пока вид ребенка не будет удален (потому что он poped и не указатель показывает на него), но тогда объект передается из поля зрения ребенка к родительский вид также удаляется. Может ли кто-нибудь сказать мне, как сделать возможным сохранение моего объекта (даже если представление, которое его создало, удалено)? С NSString мой метод работает очень хорошо ... но с объектами я всегда получаю EXC_BAD_ACCESS

+0

Вместо создания 'objectFromChild' и установки' someObject' равны ему в parentView. Почему бы не построить объект с помощью метода в parentView, а затем просто получить доступ к объекту в parentView из дочернего элемента, когда это необходимо, используя нотацию «parentView.someObject». – Kyle

+0

Я пробовал это, но как только childview удаляется, данные в объекте (скажем, некоторые строки), которые были созданы дочерним, больше недоступны :-( – user2173784

ответ

0

Убедитесь, что родительский объект его сохраняет.

0

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

Передача данных
Если вы хотите, чтобы передать объект вверх от ребенка к родителю, создать свой класс ребенка так, чтобы объект или переменным является государственной собственностью. Тогда любой другой объект (, подобный родительским объектам, владельцем которого является ребенок), может получить доступ к этому свойству.

Сохранение данных Живой
Обычно EXC_BAD_ACCESS означает, что объект уже был удален системой. Сообщите системе, которую вы хотите вставить в объект, установив «strong» в объявлении свойства, и это позаботится о вашей проблеме с EXC_BAD_ACCESS.

Посмотрите на следующий код, на примере того, как реализовать очень простую связь между родительскими/дочерними данными и сохранить данные.

//****** Child.h 

@interface Child : NSObject 

// Child has a public property 
// the 'strong' type qualifier will ensure it gets retained always 
// It's public by default if you declare it in .h like so: 
@property (strong, nonatomic) NSString *childString; 

@end 


//****** ParentViewController.h 
#import <UIKit/UIKit.h> 
#import "Child.h" 

@interface ParentViewController : UIViewController 

@property (strong, nonatomic) Child *myChild; 

@end 



//****** ParentViewController.m 

@implementation ParentViewController 

@synthesize myChild; 

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    // create child object 
    self.myChild = [[Child alloc] init]; 

    // set child object (from parent in this example) 
    // You might do your owh setting in Child's init method 
    self.myChild.childString = @"Hello"; 

    // you can access your childs public property 
    NSLog(@"Child string = %@", self.myChild.childString; 
} 
+0

Спасибо, но я уже упоминал, что с NSString это не проблема. В вашем решении у вас есть указатель на childview. Таким образом, childview не удаляется в вашем решении, и вы можете получить доступ к var. – user2173784

+0

@ user2173784 Пожалуйста, разместите код, который объявляет/вводит объект вашего ребенка. Плюс все, что происходит с объектом вверх Дело в том, что родитель пытается получить к нему доступ. С большим количеством кода у людей будет лучший контекст, который поможет вам. – sean

Смежные вопросы