iPhone-自动关闭viewController

iPhone-自动关闭viewController,iphone,Iphone,我有一个视图控制器,它是使用 [self presentModalViewController:myVC animated:YES]; 这个VC有几个声明的保留属性(@property),我必须在它的dealloc上发布它们 变量声明为 @property (nonatomic,retain) myClass1 *myProperty; @property (nonatomic,retain) myClass2 *myProperty2; // etc... and then synthesi

我有一个视图控制器,它是使用

[self presentModalViewController:myVC animated:YES];
这个VC有几个声明的保留属性(@property),我必须在它的dealloc上发布它们

变量声明为

@property (nonatomic,retain) myClass1 *myProperty;
@property (nonatomic,retain) myClass2 *myProperty2;
// etc... and then synthesized on .m
问题是,当我使用

[self dismissModalViewControllerAnimated:YES];  
当释放我声明的保留属性时,它在dealloc上崩溃,错误为*修改正在最终确定的层*

显然,viewController在其自己的dealloc运行时已消失,然后崩溃

我该如何解决这个问题?提前谢谢

编辑 显示viewController的代码位于rootViewController上,如下所示:

UIViewController *myVC = [[UIViewController alloc] init];
myVC.delegate = self;

UINavigationController *navigator = [[UINavigationController alloc] initWithRootViewController:myVC];

[self presentModalViewController:navigator animated:YES];
[navigator release];
[myVC release];
这就是myVC上的dealloc代码所包含的内容

- (void) dealloc {
  [myProperty1 release]; // see this properties at the beginning of this question
  [myProperty1 release]; // if I comment these 2 relesases it stops crashing
  [super dealloc];
}

myVC是从内部解散的,但根据文件,这没关系。我还试图从rootviewController中取消它,但它继续崩溃。停止崩溃的唯一方法是禁用dealloc上的释放行。

如何设置属性

self.myProperty = 
??我猜你没有保留它们。你在干什么

myProperty = ...
很可能,既没有保留也没有自我。?您合成的setter需要一个机会来实际保留您新创建的对象

因此,全文应该是这样的:

MyClass1 *aProperty = [[MyClass1 alloc] init];
self.myProperty1 = aProperty;
[aProperty release];

…我问你在哪里分配和初始化“myProperty1”和“myProperty2”

恐怕你会觉得困惑,认为:

@property (nonatomic,retain) myClass1 *myProperty;
@property (nonatomic,retain) myClass2 *myProperty2;
需要发布myProperty和myProperty2吗

你错了

您只是声明要使用的对象类型,而不是分配它们


如果你把它们分配到某个地方,你就需要释放它们。

你能发布dealloc代码吗。看起来您正在释放未保留的视图控制器实例。是否可以发布代码。你所做的应该有用。你还有一条皱纹,这是个问题。发布解除锁定和显示视图控制器的方法。您的视图可能有问题。请在myVC中发布dealloc方法,以及用于分配/init myProperty和myProperty2的代码…我分配myProperty的代码位于问题的开头。。。我已经添加了代码,在那里我创建并展示了myVC,并解除了锁定。啊。。。我这样做:UIView*oneView=[[UIView alloc]initWithFrame:myFrame];self.myProperty1=oneView;[oneView发布];这不是我一直在读的文件。他们说您必须在@property上释放任何声明为retain或copy的内容,因为setter将保留该属性。请看这里:问题可能是当您在dealloc中发布myClass时,您没有在myClass中放入任何内容。使用@property(非原子,保留)myClass1*myProperty;和@myClass1;您创建了自动方法来设置和获取myClass的值,但随后必须使用self.myClass1=(someValue)调用它们。。。setter将为您保留myClass,然后您可以在解除锁定“self”时释放它,但如果出于某种原因,在myObject仍然为空(=nil)时调用“解除锁定”,则这是一个错误。。。您可以尝试添加此检查:if(myClass!=nil){[myClass release]}ah。。。我这样做:UIView*oneView=[[UIView alloc]initWithFrame:myFrame];self.myProperty1=oneView;[oneView发布]。。。在你的答案的最后,你或多或少地知道了你的答案。我认为如果你把你所有的代码都发布在这门课上,那将是最好的。否则我们只是猜测:)你的回答让我发现了问题所在。谢谢