0

リクエストとURLの接続を作成しようとしています。NSMutableDataインスタンス(responseData)も一緒に呼び出されます。接続が応答の受信を開始すると、setLength:NSUIntegerメソッドがNSMutableDataインスタンスで呼び出されます。

-(void)startDataDownloading
{
    NSURLRequest *_request = [NSURLRequest requestWithURL:self.url];
    if (_request) {
        if (!connecton) {
            connecton = [NSURLConnection connectionWithRequest:_request delegate:self];
            if (connecton) {
                responseData = [NSMutableData data];
                [connecton start];
            }
        }
    }
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [responseData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [responseData appendData:data];
}

しかし、どういうわけか、setLength呼び出しで警告が発生してクラッシュが発生します。エラーは次のように述べています

"-[__NSCFDictionary setLength:]:認識されないセレクターがインスタンス0x6a8cf70に送信されました2012-11-30 18:00:38.948 RSSReader [8997:f803] *キャッチされなかった例外'NSInvalidArgumentException'、理由:'-[__NSCFDictionary setLength:] :認識されないセレクターがインスタンス0x6a8cf70に送信されました'"

これについてのヒントをいただければ幸いです。

#import <Foundation/Foundation.h>
#import "DataParser.h"

@protocol DataConnectionDelegate <NSObject>
//protocol methods
@end
@interface UCDataConnection : NSObject <ModelParser>
@property (nonatomic, strong) NSURL *url;
@property (nonatomic, strong) NSURLConnection *connecton;
@property (strong, nonatomic) NSMutableData *responseData;
@property (nonatomic, assign) id<DataConnectionDelegate> delegate;
-(void)startDataDownloading;
- (id)initWithUrl:(NSURL *)_url andDelegate:(id<DataConnectionDelegate>)_delegate;

これはヘッダーファイルの一部です。応答が遅くなってすみません。

4

2 に答える 2

3

ほとんどの場合、responseDataを正しく保持していないため、リリースされており、上記の例では、同じ場所にNSDictionaryが割り当てられることになります。

ARCを使用している場合は、投稿したコードで問題ありません(ただし、インスタンス変数であると仮定すると、「responseData」にはアンダースコアプレフィックスが付いているはずです)。

保持リリースを使用している場合は、responseDataを割り当てるときに保持する呼び出しを追加する必要があります。

更新:ヘッダーファイルに基づくと、インスタンス変数を直接参照しており、retain-releaseを使用しているようです。最善のオプションは、プロパティメカニズムを介してのみresponseDataを参照することです。つまり、すべての使用の前に。を付けself.ます。

于 2012-11-30T15:02:36.533 に答える
0

これが答えかどうかはわかりませんが、ここで疑わしいのは、あなたが不動産を所有しているということです。

@property (strong, nonatomic) NSMutableData *responseData;

デフォルトでは、selfでアクセスする必要があります。responseData;

プライベートivarにアクセスする場合は、デフォルトで_responseDataを使用する必要があります。

私も見たい.mファイルで別の言い方をしない限り、何が起こっているのかを確認してください(この回答が役に立たない場合に備えて)。

于 2012-12-01T12:37:21.453 に答える