0

NSStringCore Data に保存されている があります。これはオプションですが、sqlite dbはnullになる可能性があることを意味すると私は信じています。ここに示す「isEmptyOrWhitespace」という便利なメソッドがあります。

- (BOOL)isEmptyOrWhiteSpace {
    return self == nil ||
    self.length == 0 ||
    [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length == 0;
}

Core Data からの文字列が nil の場合、このメソッドを呼び出していないようです。つまり、ブレークポイントがヒットすることはありません。次のようなコード チャンクがあるため、これは特に厄介です。

if(![string isEmptyOrWhitespace]) {
    [string doSomething];
}

doSomethingstring が nil の場合に実行されていますが、明らかに私の意図ではありません。メソッドを呼び出す前に、文字列が nil かどうかを確認せずにこれを回避する方法はありますか? それとも、メソッドがnilオブジェクトで実行されないというObjective-Cの「機能」ですか?

4

2 に答える 2

3

stringがの場合nil、への[string isEmptyOrWhitespace]メッセージの送信は何もしないため、何もしませんnil

編集: @Jim が指摘したように、この答えは正しくありません。[nil isEmptyOrWhitespace]が返され、それが の場合にブロックが実行されない0本当の理由です。if ()string = nil

于 2012-08-30T14:51:27.137 に答える
-1

マーティンの答えは正確です。必要なのは、その文字列の長さを確認するためのコア データ エンティティ クラスの便利なメソッドです。文字列が nil の場合、長さはゼロになり、空か nil かがわかります。

于 2012-08-30T14:54:12.280 に答える