Frage

Ich bin mit initWithContentsOfURL von NSData laden Sie ein Bild von einer url.Jedoch, ich nicht wissen, die Größe der Bild vorher, und ich möchte die Verbindung zu stoppen, oder fehlschlagen, wenn die Antwort größer ist als eine bestimmte Größe.

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

Vielen Dank im Voraus.

War es hilfreich?

Lösung

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

Einfaches Beispiel:(receivedData wird im header definiert als NSMutableData)

@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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top