2

次のコードを使用して NSDictionary から NSString を取得し、それを NSUrl にキャストします。

NSURL * url = [NSURL URLWithString:[self.item objectForKey:@"website"]];

NSDictionaryself.itemは Web サーバーから取得され、JSON データを使用して正しく入力されます。NSDictionary 内の他のすべてのオブジェクトは完全に正常に動作します。

ただし、オブジェクトに Web サイトが入力されていないため、Web サーバーがテキスト「null」を含む Web サイト URL を渡す場合があります。デバッグから、NSURL オブジェクトにテキスト「null」を含む URL を含めることができることがわかりました。しかし、どうすればこれを防ぐことができますか、またはこれをチェックする if ステートメントをどのように書くことができますか?

私は次のことを試しました:

NSString * niks = [eventUrl absoluteString];
if(niks == @"null")
{
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Event" message:@"Event heeft geen website" delegate:nil cancelButtonTitle:@"Oke" otherButtonTitles:@"Oke", nil];
    [message show];
}
else
{
    [webView loadRequest:[NSURLRequest requestWithURL:eventUrl]];
    NSLog(@"%@",eventUrl);
}

しかし、これは機能しません。常に URL を直接 webview に渡します。誰かが私を正しい方向に向けることができますか?

4

4 に答える 4

3

あなたの比較;

if(niks == @"null")

ポインタが等しい場合 (つまり、2 つのポインタが同じ文字列オブジェクト インスタンスである場合) のみ比較します。1 つは定数であり、もう 1 つはサーバーからフェッチされた JSON から動的に作成されるため、ほとんどありません。

2 つの文字列の内容を比較するには、代わりに行う必要があります。

if([niks isEqualToString:@"null"])

リンクの渇きについては、 [NSString isEqualToString:] ドキュメントを参照してください。

于 2012-09-29T17:18:10.843 に答える
1

文字列の比較を行うには、[niks isEqualToString:@ "null"]を実行する必要があります。これが、最初の条件が壊れている理由です。[niks RangeOfString:@"null"];を使用することもできます。

于 2012-09-29T17:16:44.033 に答える
0

記憶が 100% はっきりしているわけではありませんが、「null」文字列ではなく[NSDictionary objectForKey:]実際にクラス インスタンスが返される状況に遭遇しました。NSNull

この場合、メソッド[self.item objectForKey:@"website"]を使用してのクラスを確認できますisKindOfClass

于 2012-09-29T17:20:21.617 に答える
0

私はあなたがこれを行うことができると信じています:

id str = [self.item objectForKey:@"website"];
if([str isMemberOfClass[NSNull class]]) { 
    ... its null
}

JSON コンバーターはすべて null を NSNull オブジェクトに変更します (私の経験では)。

于 2012-09-29T17:19:14.533 に答える