2012-04-01 24 views
2

Ich versuche, das Bild auf folgende Weise zu laden. Aber wenn ich meine loadImageFromURL:(NSURL*)inURL Funktion als [self loadImagesFromURL:url] in meinem tableView seine 0 Bytes aufrufen. , wie der Wert von (delta)NSData in meinem tableview? Bekommen, die als global deklariert ...NSData gibt 0 Bytes zurück

NSURLConnection* connection; 
NSMutableData* delta; 

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

    if (conn) { 
     delta = [[NSMutableData data] retain]; 
    }  
} 

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

    } 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {  
    NSURL *urlink=[NSURL URLWithString:[[objectsForImages objectForKey:[arrayOfCharacters objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row]]; 
    [self loadImageFromURL:urlink]; 
    UIImage *imageForAz=[UIImage imageWithData:delta]; 
    cell.imageView.image=imageForAz; 

} 
+0

Sind Sie sicher, dass Sie Daten von der URL erhalten? – giorashc

+0

Ja, die Daten werden empfangen ... können aber nicht auf die Daten in meiner Tabellenansicht zugreifen ... –

Antwort

5

Sie bekommen durch die Asynchronität verwirrt. Wenn loadImageFromURL: synchron waren, z.B. Umhüllung sendSynchronousRequest:returningResponse:error:, würde Ihr Code arbeiten, wie Sie erwarten würden; loadImageFromURL: würde beim Abrufen blockieren und zurückkehren, wenn delta ausgefüllt wurde.

Dies ist jedoch alles asynchron, also was Sie eigentlich tun müssen, implementieren connectionDidFinishLoading: in Ihrem Delegaten (in diesem Fall ist self) und lassen Sie es cell.imageView.image dort gesetzt.

entsprechend einige Ihrer Code Umschreiben (Ich gehe davon aus, dass Sie Fremd Code in tableView:cellForRowAtIndexPath: zum Zwecke dieses Beispiels entfernt):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {  
    NSURL *urlink=[NSURL URLWithString:[[objectsForImages objectForKey:[arrayOfCharacters objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row]]; 
    [self loadImageFromURL:urlink]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    UIImage *imageForAz=[UIImage imageWithData:delta]; 
    cell.imageView.image=imageForAz; 
} 

Schauen Sie sich die URL Loading System Programming Guide on NSURLConnection für weitere Details/Beispiele.

+0

vielen Dank Kristian für Ihre freundliche Antwort, aber wie komme ich auf meine Tabellenansicht Zelle in meiner connectionDidFinishLoading funtion? ... haben erklärt Zelle als global, aber es ist nutzlos .. :( –

+0

Ah, ich fragte mich, ob Sie das fragen würden. Sie wollen ein 'Delta' pro' Zelle', und eine Zuordnung von jeder Verbindung begann mit diesen beiden. Ich werde versuchen, ein Beispiel für dich zu graben. –

+0

... dieser Code wurde mit einigen ziemlich grundlegenden Missverständnissen geschrieben, ich bin etwas davon nicht überzeugt ... –

Verwandte Themen