【问题标题】:Crash with "message sent to deallocated instance" when touching UITextField触摸 UITextField 时出现“发送到已释放实例的消息”崩溃
【发布时间】:2013-08-31 08:58:34
【问题描述】:

我有一个UIViewController 的实现,其中viewDidLoad 的代码如下:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view from its nib.
    for (int i=0; i<10; i++)
    {
        NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

        NSString *speedDial = [prefs stringForKey:[NSString stringWithFormat:@"%s%i", "fav",i]];
        if ([speedDial length] > 0)
            [self getTextField:i].text = speedDial;

        [self getTextField:i].returnKeyType = UIReturnKeyDone;
        [self getTextField:i].delegate = self;
    } 
}

当我触摸屏幕上的UITextField 时,应用程序崩溃并且我得到以下输出:“已发送到已释放实例的消息”。在该视图上按下按钮时我遇到了同样的错误,所以我猜错误是在UIViewController 级别。 我使用的ARC 和UITextField 都定义为strong。 我曾尝试寻找内存管理问题,但没有成功。

有什么想法吗?

谢谢, 西蒙

【问题讨论】:

  • 你是如何启动你的 UIViewController 的?
  • 我有以下代码: - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // 自定义初始化 } return self; }
  • 我的意思是你如何展示 ViewController 类?您是在使用导航控制器,还是以模态方式呈现它?
  • -getTextField: 是如何实现的?
  • ViewController 是这样呈现的:FavoritesActivityViewController *favorites = [[FavoritesActivityViewController alloc] initWithNibName:@"FavoritesActivityViewController" bundle:[NSBundle mainBundle]]; [self.view addSubview:favorites.view];

标签: ios memory-management crash uitextfield


【解决方案1】:

在[self.view addSubview:favorites.view]; 中,您正在使用收藏夹视图,但允许其控制器超出范围。创建 favorites 的对象应该使用强引用保留它,而不是使其成为局部变量。

【讨论】:

  • 我知道这个答案会在检查之前解决我的问题。并在检查后确认!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
相关资源
最近更新 更多