ので、私はクラスだ: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は何も検出しません)。 connectionDidFinishLoading
をself.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];