2009-07-23 12 views
3

Ich verwende initWithContentsOfURL von NSData ein Bild von einer URL zu laden. Allerdings kenne ich die Größe des Bildes vorher nicht, und möchte die Verbindung anhalten oder fehlschlagen, wenn die Antwort eine bestimmte Größe überschreitet.Bild lädt von URL in iPhone, nur dann, wenn kleinen

Gibt es eine Möglichkeit, dies in iPhone 3.0 zu tun?

Vielen Dank im Voraus.

Antwort

10

Sie können es nicht direkt tun über NSData jedoch NSURLConnection unterstützen würde so etwas durch das Bild asynchron geladen und mit Verbindung: didReceiveData: zu überprüfen, wie viele Daten Sie erhalten haben. Wenn Sie über Ihr Limit gehen, senden Sie einfach die Nachricht Abbrechen an NSURLConnection, um die Anfrage zu stoppen.

Einfaches Beispiel: (receivedData im Header als NSMutableData definiert ist)

@implementation TestConnection 

- (id)init { 
    [self loadURL:[NSURL URLWithString:@"http://stackoverflow.com/content/img/so/logo.png"]]; 
    return self; 
} 

- (BOOL)loadURL:(NSURL *)inURL { 
    NSURLRequest *request = [NSURLRequest requestWithURL:inURL]; 
    NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self]; 

    if (conn) { 
     receivedData = [[NSMutableData data] retain]; 
    } else { 
     return FALSE; 
    } 

    return TRUE; 
} 

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

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

    if ([receivedData length] > 5120) { //5KB 
     [conn cancel]; 
    } 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)conn { 
    // do something with the data 
    NSLog(@"Succeeded! Received %d bytes of data", [receivedData length]); 

    [receivedData release]; 
} 

@end 
+1

Richtig, das ist der einzige Cocoa-Ebene Weg, dies auf dem iPhone zu tun. Beachten Sie, dass es asynchron ist, während der ursprüngliche Code synchron ist. Asynchron ist fast immer besser, aber ein anderer Ansatz, um sich daran zu gewöhnen. –