2009-03-03 11 views
5

私はこのようなものになります私のアプリケーションでいくつかのコードがあります。これは私のすべての時間のために働くなぜCocoaは空の文字列を返すのですか?

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

を。私はそれを見たことがないの作品です。私の知る限り、ほとんどのユーザーは問題を経験しません。しかし、私はpostHashが空の文字列(@"")であることがあります。

誰でも理由を説明できますか?

いくつかのより多くのコンテキスト/投機:

これが唯一のジェイルブレイク携帯電話に起こるようです。彼らについて何か違うことはありますか?私は通常、利用可能なメモリが少ないことを知ります。ここに貢献できるものは何ですか?

postHashがテーブルセルで使用されていることがあります。正しく入力されないことがありますので、データベースコールになるはずです。実際には、データベースにも空の文字列がある場合は、非常に似通ったコードのために問題が残ります。

hashは、NULL以外の値を返しています。ここにNULLを強制すると、アプリケーションがクラッシュします。同様に、postHashnilではないため、同じ理由でアプリをクラッシュさせる可能性があります。

私はこれがおそらく記憶に関連していると考えています。メソッドが、あまりにも多くのメモリを割り当てようとすると、-didReceiveMemoryWarningが呼び出されて何が起こるのですか?私は、ある時点で、Springboardがアプリを取り出していることを知っています。しかし、Cocoaが期待値ではなくヌル文字列を返す可能性はありますか?私が知る限り、長い文字列が存在するはずの空文字列が存在することによってのみ引き起こされたという報告がいくつか聞いたことがあります。

他の推測、理論、またはアイデアを歓迎します。

+0

"Cocoaが期待値ではなくヌル文字列を返す可能性はありますか?" "ヌル文字列"はNULL(C文字列)またはnil(NSString)のいずれかになります。空の文字列はまったく異なります。文字列がない文字列ですが、NULL/nilは文字列ではありません。 –

+0

これは、「空文字列」とは何かを理解していません。上記の「空文字列」とは、Objective-Cでは「空の文字列」、つまり「@」は、Cでは「」を意味します.Nil/NULL値を指定すると、アプリケーションがクラッシュします。 –

+0

"NULL"は0を意味します。ヌル文字は '\ 0'です。つまり、0です。ヌルポインタは0です。ヌルの場合は文字列ではないため、Cでは「ヌル文字列」というようなことはありません。それはちょうど0です。 –

答えて

6

しかし、私はpostHashが空の文字列(@"")であることがあることがあります。

誰でも理由を説明できますか?

hashは空の文字列(hash[0] == '\0')です。

+0

私はこれが最も可能性の高いシナリオであることに同意しますが、質問に記載されているように、私はそれが空の文字列ではないと確信しています。 –

+2

「最も可能性の高いシナリオ」ではありません。それは*唯一のシナリオです。 NULLはあなたに例外を与えます。空でない文字列は、空でない文字列を返します。空の文字列だけが空の文字列を取得します。簡単な証明:NSLogは長さ(strlen(ハッシュ))と長さ([postHash長さ])です。 –

4

私はようやくこれに対する解決策を見つけました。私はピーターに正しい答えを与えようとしていますが、空の文字列を得ている理由は面白いです。

データベースは、正しく入力されたです。クエリも正しいです。私の電話と私のユーザーの違いは、彼らは壊れた携帯電話を持っているということです。そして明らかに刑務所が壊れているiPhoneは、iPhone OSの出荷バージョンに見られるものとは異なるバージョンのSQLiteを使用することがあります。

バージョンの変更により、パラメータの1つが正しく設定されず、sqlite3_column_textが空の文字列を返す原因となったコードのバグが公開されました。

+3

jailbroken電話を検出してからユーザーのサポートを拒否する方法が必要です。このためにどれくらいの時間を費やしましたか?それはオンではありません。 – mxcl

+0

確かに難しいですが、私は約20時間かかりました - 私は偶然に解決策を見つけました!裏返して、彼らは顧客に支払っていた。それでも、私は刑務所に壊れた電話をサポートしない権利を留保していると言いました。私はアプリのブログでもっと書いた:http://www.yummyapp.com/2009/05/pirates-and-jail-break.html –

関連する問題