我的应用程序中有一些看起来像这样的代码:
char *hash = (char*) sqlite3_column_text(get_bookmark, 0);
NSString* postHash = [NSString stringWithUTF8String:hash];
每次都适合我;我从来没有见过它不工作。我的大多数用户都没有遇到问题(据我所知)。但是我发现postHash
在某些时候对某些用户来说是一个空字符串(@""
)。
任何人都可以解释原因吗?
更多背景/推测:
这似乎只发生在越狱手机上。他们有什么不同吗?我认为通常可用的内存较少。还有什么可以贡献的吗?
postHash
用于表格单元格,偶尔会看到正确填充,因此我有理由相信数据库调用应该工作。事实上,如果数据库也有一个空字符串,那是因为代码非常相似所以问题仍然存在。
hash
肯定会返回非NULL值。如果我在这里强制NULL,应用程序崩溃。同样地,postHash
不是nil
,因为这也会导致应用程序崩溃(出于同样的原因)。
我在想这可能与记忆有关。如果该方法试图在-didReceiveMemoryWarning
被调用之前分配太多内存,会发生什么?我知道,在某些时候,Springboard会弹出应用程序。但是Cocoa有可能在这里返回一个空字符串而不是预期的值吗?我听说过一些报道,据我所知,只有一个空字符串存在才会出现更长的事情。
欢迎任何其他猜测,理论或想法。
答案 0 :(得分:6)
但是我发现
postHash
在某些时候对某些用户来说是一个空字符串(@""
)。任何人都可以解释原因吗?
因为hash
是一个空字符串(hash[0] == '\0'
)。
答案 1 :(得分:4)
我终于找到了解决方法。我会给彼得接受的答案,因为他是对的,但我得到一个空字符串的原因是......很有趣。
正确填充数据库 。查询也是正确的。我的手机和用户之间的区别在于他们手机已经破了。显然,jail破损的iPhone有时会使用不同于运行版iPhone OS的SQLite版本。
版本中的更改暴露了我的代码中的一个错误,导致其中一个参数设置不正确,sqlite3_column_text
返回一个空字符串。