2011-12-08 7 views
0

jsonフレームワークからポーリングデータを作成するために使用しているコードは次のとおりです。しかし、私はそれがクラッシュするアプリを起動するたびに。何かアドバイス?JSON-Frameworkを使用するとアプリケーションがクラッシュする

-(void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
    self.responseData = nil; 

    NSArray *latestEvent = [(NSDictionary*)[responseString JSONValue] objectForKey:@"Events"]; 
    [responseString release]; 

    //Choose event 
    NSDictionary *flashMob = [latestEvent objectAtIndex:0]; 

    //Fetch the Data 
    NSString *name = [flashMob objectForKey:@"event"]; 
    NSDate *eDate = [flashMob objectForKey:@"date"]; 
    NSString *location = [flashMob objectForKey:@"location"]; 
    NSString *danceVid = [flashMob objectForKey:@"dancevideo"]; 

    //Set the text to the label 
    label.text = [NSString stringWithFormat:@"Next Flash Mob is: %@, on %@, near %@, with Dance: %@", name, eDate, location, danceVid]; 

} 

とJSONは次のとおりです。呼び出しが失敗した可能性がありますしない限り、私はまた、viewDidLoadメソッドを含めています

{ "Events":[{"id":0001,"event":"Party Rock Anthem Flash Mob","date":"12/18/2011", 
"dancevideo":"http://www.youtube.com/watch?v=dP2ddTuMKIg","Location":"Flatirons Crossing,  Broomfield, CO"}] 
} 

編集。

- (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.corliosity.com/denverflash.json"]]; 
     [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
     responseData = [[NSMutableData data] retain]; 

     // Do any additional setup after loading the view from its nib. 
    } 
+0

どのようなエラーメッセージが表示されますか? –

+0

そして、どの行にエラーがありますか? – Chaosphere2112

+0

クラッシュだけのエラーメッセージはありません。 –

答えて

0

-(void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    // try this code here 
    NSDictionary *JSONDictionary = [[[[SBJsonParser alloc] init] autorelease] objectWithData:responseData]; 
    [self.responseData release] // only if is retained by your class. 
    self.resposeDate = nil; 

    NSArray *latestEvent = [JSONDictionary valueForKey:@"Events"]; 
    [responseString release]; 

    //Choose event 
    NSDictionary *flashMob = [latestEvent objectAtIndex:0]; 

    //Fetch the Data 
    NSString *name = [flashMob objectForKey:@"event"]; 
    NSDate *eDate = [flashMob objectForKey:@"date"]; 
    NSString *location = [flashMob objectForKey:@"location"]; 
    NSString *danceVid = [flashMob objectForKey:@"dancevideo"]; 

    //Set the text to the label 
    label.text = [NSString stringWithFormat:@"Next Flash Mob is: %@, on %@, near %@, with Dance: %@", name, eDate, location, danceVid]; 
} 

以下、このコードを試してみてください今、あなたは、対応するオブジェクトが辞書の配列である必要があり、JSONDictionary内部のイベントキーが表示されるはずです。 好きな方法で処理してください。

+0

ありがとうございますが、私のアプリはまだクラッシュします。エディタに表示されるのは 'sharedlibrary apply-load-rules all'と' Current language:auto、現在objective-c'です。 –

+0

心配しないでくださいエラーを修正しましたありがとうございました! –

0

didReceiveResponseコールバックをチェックし、ヘッダーとエラーコードを解析します。

私はJSONに何の問題もありません。しかし、javascriptのevalメソッドを使用してJSON形式をチェックしてください。

online json validatorを使用してこのJSON文字列を検証しようとすると、1つのエラーが発生する可能性があります。

+0

didRecieveResponseで何を探しますか? –

+0

オンラインのJSON人間が読める形式のこのWebサイトをお勧めします。 http://jsonviewer.stack.hu/ JSONをコピーしてそれを検証して、ビューアタブで読み込むことができます。 – Gabriele

0

JSON文字列をバリデーターhttp://jsonlint.comで実行しても機能しません。それはあなたのIDの文字列を期待しており、それは番号を取得しています。私はあなたのデータをどこから取得しているかを確認します。おそらくそれは簡単です。別に壊れたJSONから

+0

id値に問題がありましたが、それでもクラッシュしました。ご協力ありがとうございました –

0

(あなたが10001から「ID」の値を変更した場合や"0001"それが動作します)私はあなたの根本的な問題は、これら2つのラインだと思う:あなたはNSStringのを割り当てている

NSDate *eDate = [flashMob objectForKey:@"date"]; 
NSString *location = [flashMob objectForKey:@"location"]; 

型NSDateのポインタに渡します。 (NSStringをNSDateに自動的に変換することはありません(たとえ日付のように見えても)。これはおそらく主な問題です。あなたのデータはキーLocationを持っていますが、あなたのコードは小文字の「L」とlocationを使用しているため

第二に、あなたのlocation変数はnilになります。

関連する問題