NSThread'de bir NSURLConnection kullanıyorum, ancak NSURLConnection'ın temsilci yöntemlerinin hiçbiri yürütülemiyor! NSTread alt sınıfımda ana parçam ve iş parçacığı etkin tutan bir süre döngü var. Herhangi bir yardım?NSThread'de NSUrlConnection - Hiçbir temsil yürütülür!
Bu kodun tamamı için üzgünüm, ancak sorunumu açıklamanın en iyi yolu olduğunu düşünüyorum. Yani bu çoğunlukla bir elma örnek projesinden createConnectionWithPath:userObjectReference
@interface WSDAsyncURLConnection : NSObject
{
NSMutableData *receivedData;
NSDate *connectionTime;
NSURLConnection *connection;
id _theUserObject;
}
@property (nonatomic, retain) NSMutableData *receivedData;
@property (nonatomic, retain) NSDate *connectionTime;
@property (nonatomic, assign) NSURLConnection *connection;
- (void)createConnectionWithPath:(NSString *)thePath userObjectReference:(id)userObject;
@end
#import "WSDAsyncURLConnection.h"
@implementation WSDAsyncURLConnection
@synthesize connectionTime, receivedData, connection;
- (void) terminate
{
if (self.connection) {
[self.connection release];
self.connection = nil;
}
}
- (void) createConnectionWithPath:(NSString *)thePath userObjectReference:(id)userObject;
{
_theUserObject = userObject;
NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:thePath]
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
self.connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately:YES];
if (self.connection)
{
/* record the start time of the connection */
self.connectionTime = [NSDate date];
/* create an object to hold the received data */
self.receivedData = [NSMutableData data];
}
}
- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[self.receivedData setLength:0];
}
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
/* appends the new data to the received data */
[self.receivedData appendData:data];
}
- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
[self terminate];
}
- (void) connectionDidFinishLoading:(NSURLConnection *)connection
{
// displays the elapsed time in milliseconds
NSTimeInterval elapsedTime = [[NSDate date] timeIntervalSinceDate:self.connectionTime];
// displayes the length of data received
NSUInteger length = [self.receivedData length];
NSString* aStr = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding];
[self terminate];
[[NSNotificationCenter defaultCenter] postNotificationName:WSDAsynchURLConnectionDidFinished
object:_theUserObject
userInfo:[NSDictionary dictionaryWithObject:aStr forKey:@"urlResponseString"]];
NSLog(@"ti=%f, l=%d, response=%@", elapsedTime, length, aStr);
}
@end
Bu kodudur çağıran zaman uyumsuz bağlantısını yapan bir nesnedir ve bir NSThread dışında çalışıyor. Ancak aşağıdaki konu alt sınıfında kullandığımda delege yöntemi yürütülüyor!
@implementation IncomingThread
- (void) main {
NSAutoreleasePool *poool = [[NSAutoreleasePool alloc] init];
// I start the URLConnection here ... But no delegate is executed !
[urlConn createConnectionWithPath:@"http://localhost:8888" userObjectReference:nil];
while (![self isCancelled]) {
[NSThread sleepForTimeInterval:3.];
}
[poool release];
}
- (id) init
{
self = [super init];
if (self != nil) {
urlConn = [[WSDAsyncURLConnection alloc] init];
}
return self;
}
- (void) dealloc {
NSLog(@"deallocating (%@)...", [self className]);
[urlConn release];
[super dealloc];
}
örnek koduna bir göz atacağım Haklısın! Onu özledim! Teşekkür ederim! – Vassilis
xmmm ... 'SleepForTimeInterval' yorumunda bulunmasam bile, hala delege çağrısı yapılmaz. (İş parçacığı bırakmam - ana yöntem sonlandığında, ancak kendi başına serbest bırakılırsa hariç) – Vassilis
Evet, iş parçacığı derhal çıkar. Ayrı bir iş parçacığı kullanmak isterseniz, senkronize isteği kullanın veya ana iş parçacığındaki bir eşzamanlamayı yapın. – Max