0

quizlet.com からデータを取得していますが、単純なコードで問題なく動作します。

-(void) grabbQuizletWithUrl:(NSURL*)requstURL {

     NSString *dataString = [NSString stringWithContentsOfURL:requestURL encoding:NSUTF8StringEncoding error:&error]; 

     NSDictionary *dict = [dataString JSONValue];
}

しかし、アクティビティ インジケーターを開始および停止するには、NSURLConnection を使用する必要があります。私はしようとしています

-(void) grabbQuizletWithUrl:(NSURL*)requstURL {

    NSURLRequest *quizletRequest = [[NSURLRequest alloc] initWithURL:requestURL];
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:quizletRequest
                                                          delegate:self];
    [connection release];
    [quizletRequest release];

}

// and getting data in delegate method:



- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

    [self.activityIndicator stopAnimating];

    NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    NSDictionary *dict = [dataString JSONValue];

}

次のようなメッセージが表示されます。

[2377:707] -JSONValue が失敗しました。エラー: 予期しない入力の終わり

[2377:707] -JSONValue が失敗しました。エラー: トークンの不正な開始 [.]

[2377:707] -JSONValue が失敗しました。エラー: トークンの不正な開始 [d]

4

1 に答える 1

3

では- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;、応答の一部しか得られないため、受信したデータを以前に保存したデータに追加する必要があります。つまり、次のようになります。

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // someNSMutableDataIVar is an ivar to store the data in
    [someNSMutableDataIVar appendData:data];
}

次に、別のデリゲート メソッドで :- (void)connectionDidFinishLoading:(NSURLConnection *)connection;データを処理する必要があります。

-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
    // the connection finished loading all data, process...
    [self.activityIndicator stopAnimating];
    NSString *dataString = [[NSString alloc] 
                            initWithData:someNSMutableDataIVar
                                encoding:NSUTF8StringEncoding];
    NSDictionary *dict = [dataString JSONValue];
}

非同期 URL 読み込みシステムについては、Apple のURL Loading System Programming Guideで詳しく説明されています。

お役に立てれば !

于 2011-07-15T21:27:02.117 に答える