2011-07-27 16 views
0
をNSURLConnection&NSMutableDataの記述方法にアクセスすることはできませんが、

ので、私はクラスだ:DataFetcher.h
奇妙なバグ - そのアイバーズ

#import <Foundation/Foundation.h> 

@interface DataFetcher : NSObject 
{ 
    NSURLConnection *networkConnection; 
    NSMutableData *recievedData; 
    BOOL isFetchingFinished; 
} 

@property (nonatomic, retain) NSMutableData *recievedData; 
@property (nonatomic, retain) NSURLConnection *networkConnection; 

- (void)fetchDataWithRequest:(NSMutableURLRequest *)request; 

DataFetcher.m:

#import "DataFetcher.h" 

@implementation DataFetcher 

@synthesize recievedData; 
@synthesize networkConnection; 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     NSMutableData *data = [[NSMutableData alloc] initWithLength:0]; 
     self.recievedData = data; 
     [data release]; 
    } 

    return self; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    NSLog(@"Connection Error:%@\n Failure Reason:%@", [error localizedDescription], [error localizedFailureReason]); 
    [networkConnection release]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
} 

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

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [networkConnection release]; 
    NSLog(@"%@", self.recievedData.length); 
    [self processData]; 
} 

- (void)fetchDataWithRequest:(NSMutableURLRequest *)request 
{ 
    NSURLConnection *aConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; 
    self.networkConnection = aConnection; 
    [aConnection release]; 
    [self.networkConnection start]; 
    if(!self.networkConnection) 
    { 
     NSLog(@"Connection failed! recieved nil at alloc point"); 
    } 
} 

- (void)dealloc 
{ 
    [super dealloc]; 
    [recievedData release]; 
} 

@end 



通常、EXC_BAD_ACCESSのアカウントでクラッシュします(NSZombieは何も検出しません)。 connectionDidFinishLoadingself.recievedData.lengthにちょうどself.recievedDataにすると、クラッシュすることはなく、そこにデータがあるように見えます。 self.networkConnectionの場合と同じことです - もし私がちょうどself.networkConnectionを印刷すると、それはOKですが、self.networkConnection.retainCount(例えば、どんなivarも動作します)を印刷すると、同じ信号でクラッシュします。

私は、問題がどこにあるかを把握するように見えることができない、と私は静かにしばらくの間、それを見てきた、そして、私はこの:)
TNXといくつかの助けに感謝します!あなたはactuall通常の整数を渡しながら、ここで
DataFetcher *fetcher = [[DataFetcher alloc] init];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"]]; [fetcher fetchDataWithRequest:request]; [fetcher release]; [request release];

答えて

0
NSLog(@"%@", self.recievedData.length); 

%の@書式指定子を使用すると、Objective-Cのオブジェクトをログに記録しようとしていることを意味します

ああ、私はこのコードでそれを呼び出しますそれはあなたのアプリをクラッシュさせます。ログを

NSLog(@"%d", self.recievedData.length); 
に変更してください