を使用して確認してください。それを解析することに問題はありません。しかし、場合によってはJSONにトークン値がありません。値が存在するかどうかをチェックするにはどうすればいいですか?チェックしないと、アプリがEXCBadAccessでクラッシュするためです。JSONのパースとは、私は、このJSONを持ってSBJSON
ありがとうございます!
を使用して確認してください。それを解析することに問題はありません。しかし、場合によってはJSONにトークン値がありません。値が存在するかどうかをチェックするにはどうすればいいですか?チェックしないと、アプリがEXCBadAccessでクラッシュするためです。JSONのパースとは、私は、このJSONを持ってSBJSON
ありがとうございます!
SBJSONはNSDictionaryオブジェクトを返します。 objectForKeyによって返されたポインタがnilであるかどうかをチェックする必要があります。NSNullであるかどうかもチェックする必要があります(値が存在する場合はtrue、JSONではnullに設定されます)。また、データが実際にNSDictionaryの:
id dataDictionaryId = [resultsDictionary objectForKey:@"data"];
// check that it isn't null ... this will be the case if the
// data key value pair is not present in the JSON
if (!dataDictionaryId)
{
// no data .. do something else
return;
}
// then you need to check for the case where the data key is in the JSON
// but set to null. This will return you a valid NSNull object. You just need
// ask the id that you got back what class it is and compare it to NSNull
if ([dataDictionaryId isKindOfClass:[NSNull class]])
{
// no data .. do something else
return;
}
// you can even check to make sure it is actually a dictionary
if (![dataDictionaryId isKindOfClass:[NSDictionary class]])
{
// you got a data thing, but it isn't a dictionary?
return;
}
// yay ... it is a dictionary
NSDictionary * dataDictionary = (NSDictionary*)dataDictionaryId;
// similarly here you could check to make sure that the token exists, is not null
// and is actually a NSString ... but for this snippet, lets assume it is
NSString * token = [dataDictionary objectForKey:@"token"];
if (!token)
// no token ... do something else
更新
これは私がSBJSONの解析結果をチェックするために書いたテストコードです:そこだ時にデータ辞書内で何プリントアウトしてみ
NSError* error = NULL;
id json = [parser objectWithString:@"{\"data\":null}" error:&error];
NSDictionary * results = (NSDictionary*)json;
id dataDictionaryId = [results objectForKey:@"data"];
if (!dataDictionaryId || [dataDictionaryId isKindOfClass:[NSNull class]])
return NO;
ありがとうございますが、アプリはまだクラッシュします。もし私がトークンを得れば、それはうまくいくが、もしそれがなければ、それはまだクラッシュする。これはトークンがないときに戻ってくるjsonです:http://pastie.org/2234627 – Sunil
@Sunil私はそれを試してみて、あなたに戻ってきます:) – RedBlueThing
@Sunilそれを試して、有効なNSNull "data":nullの場合のオブジェクトを返します。だからあなたはそれをチェックする必要があります。 – RedBlueThing
をトークンはありません。
Peraphsそれはゼロではありません。
!dataDictionaryを置くのではなく、isKindOfClass(NSDictionary)をチェックすることができます。
私の答えについて明確にできるものがあれば教えてください:) – RedBlueThing