
您可以在此http://www.youtube.com/watch?v=nVVgmeJEnnY中查看我的问题的更多详细信息
VIEwController.m
#import "MenuVIEwController.h"@interface VIEwController () { MenuVIEwController *menu;}....- (voID)vIEwDIDLoad{ .... [[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(albumbuttonpressed : ) name:@"albumbuttonpressed" object:nil]; ....}....-(voID)albumbuttonpressed : (NSNotification*) notification { UIImagePickerController *photopicker = [[UIImagePickerController alloc] init]; photopicker.delegate = self; photopicker.sourceType = UIImagePickerControllerSourceTypePhotolibrary; [self presentModalVIEwController:photopicker animated:YES];}...-(voID)handleLongPress:(UILongPressGestureRecognizer*)recognizer { menu = [[MenuVIEwController alloc] initWithNibname:@"MenuVIEwController" bundle:nil]; if (self.imageVIEw.image != nil) { menu.imageAdded = YES; } [self.vIEw addSubvIEw:menu.vIEw];} MenuVIEwController.m
-(IBAction)albumbuttonpressed:(ID)sender { [self.vIEw removeFromSupervIEw]; [[NSNotificationCenter defaultCenter] postNotificationname:@"albumbuttonpressed" object:nil];}解决方法 抛开我对不应用正确的视图控制器包含的保留,问题是你的handleLongPress将被多次调用不同的Recognizer.state值,一次作为UIGestureRecognizerStateBegan,再次作为UIGestureRecognizerStateEnded.你应该检查手势的状态,例如: -(voID)handleLongPress:(UILongPressGestureRecognizer*)recognizer { if (recognizer.state == UIGestureRecognizerStateEnded) { menu = [[MenuVIEwController alloc] initWithNibname:@"MenuVIEwController" bundle:nil]; if (self.imageVIEw.image != nil) { menu.imageAdded = YES; } [self.vIEw addSubvIEw:menu.vIEw]; }} 原答案:
我建议使用removeFromSupervIEw在你的代码中放置一个NSLog或断点,看看你是否还得到那段代码.
这里有一些明显的问题.具体来说,您没有正确添加在handleLongPress中添加与MenuVIEwController关联的视图.如果你想要一个带有它自己的控制器的子视图,你必须使用包含(这只适用于iOS 5及更高版本).在收容中,你有像addChildViewController等关键方法.请参阅VIEw Controller编程指南中的Creating Custom Container View Controllers或参见WWDC 2011 – Implementing UIViewController Containment.而且,除此之外,你还要保留对MenuVIEwController的强引用,所以即使你成功删除它也是如此看,你要泄漏控制器.
花一点时间浏览收容文档/视频,我想你会想重新审视你如何展示你的菜单.这是一个密集的阅读,但值得真正理解.遏制是强大的,但必须正确.
总结以上是内存溢出为你收集整理的ios – UIViewController removeFromSuperview错误全部内容,希望文章能够帮你解决ios – UIViewController removeFromSuperview错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)