【问题标题】:exc bad access iphone errorexc错误访问iphone错误
【发布时间】:2011-08-07 04:31:31
【问题描述】:

我收到一个名为线程 1 的错误:程序收到信号:“EXC_BAD_ACCESS” 这是我的代码

[gameArray removeLastObject];
[gameArray addObject:shotArray];
[gamesArray removeObjectAtIndex:gameNumber];
[gamesArray insertObject:gameArray atIndex:gameNumber];
NSString *path = [self findGamesPath];
[NSKeyedArchiver archiveRootObject:gamesArray toFile:path]; // the error is here

为什么会出现错误?是否发布了太多次?

这里是 findGamesPath 代码

-(NSString *)findGamesPath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentFolder = [paths objectAtIndex:0]; NSString *result = [documentFolder stringByAppendingPathComponent:@"iShotTrackGames.plist"]; 返回结果; }

【问题讨论】:

    标签: iphone memory-management thread-safety xcode4 exc-bad-access


    【解决方案1】:

    多半是某些东西被发布了太多次。打开僵尸检测并重试。

    不过,在您这样做之前,请尝试对您的代码执行“构建和分析”并修复它发现的任何问题。

    我看到这是用“线程安全”标记的。为什么? IE。上述代码运行时,其他线程可能在做什么?

    【讨论】:

      【解决方案2】:

      EXC_BAD_ACCESS 意味着你在某处有一个错误的指针。这些错误通常很容易发现,因为错误指针是发生错误的行上调用的方法的参数之一。但是,在这种情况下,归档器将遍历 gamesArray 指向的整个对象图,而坏指针实际上可能在其中的任何位置。按照 @bbum 的建议打开 NSZombies - 这将帮助您找出问题所在。

      【讨论】:

        【解决方案3】:

        我想我知道发生了什么。您的路径字符串在 findGamePath 方法中失去作用域。

        您是否在该方法中分配路径字符串并返回它?

        一旦它失去作用域,它就会从内存中释放。

        然后尝试访问该字符串将导致 EXC_BAD_ACCESS,因为您正在访问已释放的对象。

        你能把 findGamePath 代码贴在这里吗?这可能会更清楚地说明问题。

        哦,这与内存管理有关,而不是线程安全。

        【讨论】:

        • -(NSString *)findGamesPath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentFolder = [paths objectAtIndex:0]; NSString *result = [documentFolder stringByAppendingPathComponent:@"iShotTrackGames.plist"];返回结果; }
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 2016-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多