【问题标题】:Assertion Failed in Objective CObjective C 中的断言失败
【发布时间】:2010-09-28 14:14:20
【问题描述】:

我收到错误“断言失败:(cls),函数 getName,文件 /SourceCache/objc4_Sim/objc4-427.1.1/runtime/objc-runtime-new.m,第 3939 行。”每当我运行以下代码时。

NSLog(@"Hello: %@\n", [NSMutableString stringWithString:@"Whatever"]);

每当我运行它时,它也会得到大约一千个上述错误:

NSMutableString* urlCopy = [[NSMutableString alloc] initWithString:url];

并将鼠标悬停在调试器中的 urlCopy 变量上。是我的 XCode 版本吗?这到底是怎么回事?我正在运行 3.2.4 64 位。我完全无法解释这一点,而且如果没有这个问题,我似乎无法创建任何类型的字符串。我编写了程序,其中这是程序中唯一的行,它仍然会产生这个错误。请帮忙!

【问题讨论】:

标签: objective-c


【解决方案1】:

我也在使用 3.2.4 64 位,您的代码(NSLog 调用)对我来说很好用。如果每个项目都发生这种情况,那么听起来您的环境一定有问题。您是否尝试过重新安装 Xcode?​​p>

【讨论】:

  • 好的,我要试试,看看效果如何。这一定与我的环境有关。
  • 这已被接受——这是否意味着当您重新安装 XCode 后问题就消失了? (不期待那个,所以在我做之前希望得到某种确认)
【解决方案2】:

有问题的函数:

/***********************************************************************
* getName
* fixme
* Locking: runtimeLock must be held by the caller
**********************************************************************/
static const char *
getName(struct class_t *cls)
{
    // fixme hack rwlock_assert_writing(&runtimeLock);
    assert(cls);

    if (isRealized(cls)) {
        return cls->data->ro->name;
    } else {
        return ((const struct class_ro_t *)cls->data)->name;
    }
}

…如果有人能从中做出点什么:)

【讨论】:

  • 是的,传入的 *cls 似乎是 NULL。这……很奇怪。至少可以这么说。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多