ios - 设置 NSObject 属性 - EXC_BAD_ACCESS

标签 ios objective-c exc-bad-access nsobject

过程:

  • 应用程序位于主视图 Controller 上,正在请求 API 上的数据以设置 NSObject 属性。请求正在私有(private)方法上处理。
  • 用户将 View Controller 更改为第二个 View Controller (请求仍在异步处理)
  • 加载第二个 View Controller
  • 请求结束,应用在设置对象属性时返回 EXC_BAD_ACCESS

对象似乎没有正确的内存访问。

我希望用户可以切换 View Controller ,即使有待处理的请求,应用程序也不会崩溃。

我不想在加载期间在 View Controller 上阻止用户。

User.h

@interface User : NSObject

[...]
@property (nonatomic) NSString *notification;
[...]

-(void) methodName;

@end

用户.m

-(void) methodName{

        //there is code around but useless for this problem

        [...]

        NSError *error;
        NSMutableDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

        self.notification = [[dict objectForKey:@"infos"] objectForKey:@"notification"]; //Here is the EXC_BAD_ACCESS


        [...]

}

MyController.m

@interface MyController ()
@end

User *user;

@implementation HomeCVViewController
-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:YES];

    user = [User new];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        [user someMethod];

        dispatch_async(dispatch_get_main_queue(), ^{
            [...]//some code
        });
    });
}

@end

编辑:

我只是将 @property (nonatomic) User *user; 放在 MyController.h 中,然后删除 User *user; 在 MyController.m 中。用户没有被释放,也没有崩溃。

最佳答案

  • 验证 [dict objectForKey:@"infos"] 不是 NSNull - 崩溃 可以在这里。
  • 其他代码看起来没问题。
  • 同时将 -(void)dealloc 添加到您的对象中并放置一个 断点在那里验证对象没有被释放 作业之前。

关于ios - 设置 NSObject 属性 - EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31002953/

相关文章:

ios - 如何查询具有特定属性值的核心数据对象

ios - Xcode 不会建议我的代码片段

objective-c - 停止 View 上的用户交互

针对游戏外观和感觉应用程序的 iPhone/iPad 架构建议

iphone - 程序收到信号 : “EXC_BAD_ACCESS”

iphone - UIImageWriteToSavedPhotosAlbum 导致 EXC_BAD_ACCESS

ios - 线程 1 : EXC_BAD_ACCESS (code=1, 地址=0xf1759018)

ios - 如何保护谷歌分析移动跟踪 ID 免受黑客攻击

objective-c - 如何知道双击标题栏时窗口是否最小化?

ios - 试图在全局范围内访问响应