代码之家  ›  专栏  ›  技术社区  ›  Stephen Darlington

为什么可可有时会返回空字符串?

  •  5
  • Stephen Darlington  · 技术社区  · 16 年前

    我的应用程序中有一些代码如下所示:

    char *hash = (char*) sqlite3_column_text(get_bookmark, 0);
    NSString* postHash = [NSString stringWithUTF8String:hash];
    

    这对我每次都有效,我从没见过 工作。我的大多数用户没有遇到问题(据我所知)。但是我发现 postHash 是空字符串( @"" )对于一些用户来说,有时。

    有人能解释为什么吗?

    更多的背景/推测:

    这似乎只发生在越狱手机上。他们有什么不同吗?我估计通常可用内存较少。还有什么能在这里做出贡献的吗?

    波斯塔什 在表单元格中使用,偶尔会看到它被正确填充,因此我有理由相信数据库调用 应该 工作。事实上,如果数据库也有一个空字符串,那是因为有一段非常相似的代码,所以问题仍然存在。

    hash 肯定返回非空值。如果我在这里强制一个空值,应用程序就会崩溃。同样地, 波斯塔什 不是 nil 因为这也会使应用程序崩溃(同样的原因)。

    我想这可能与记忆有关。如果该方法试图分配过多的内存 -didReceiveMemoryWarning 可以打电话给我发生了什么?我知道,在某种程度上,跳板会弹出应用程序。但是,cocoa是否可能在这里返回一个空字符串而不是期望的值?我听说过一些报告,据我所知,这些报告只能是由于存在一个空字符串而导致的,在这个字符串中应该存在更长的内容。

    欢迎任何其他的猜测、理论或想法。

    2 回复  |  直到 16 年前
        1
  •  6
  •   Peter Hosey    16 年前

    但是我发现 postHash 是空字符串( @"" )对于一些用户来说,有时。

    有人能解释为什么吗?

    因为 hash 是空字符串( hash[0] == '\0' )

        2
  •  4
  •   Stephen Darlington    16 年前

    我终于找到了解决办法。我要给彼得一个公认的答案,因为他是对的,但我得到一个空字符串的原因是…有趣。

    数据库 正确填充。查询也正确。我的手机和我的用户的区别在于他们的手机在监狱里坏了。显然,破狱iPhone有时使用的sqlite版本与iPhone操作系统的发货版本不同。

    版本更改暴露了我的代码中的一个错误,导致其中一个参数设置不正确,并且 sqlite3_column_text 返回空字符串。