2010-12-15 70 views
0

gars Ey, voici mon code:NSURLDownload Non détecté dans SDK 4.2

#import <Foundation/Foundation.h> 
@interface Updater : NSObject { 

    NSURLConnection *updateConnection; 
    NSURLDownload *downloadConnection; //error at this line 

} 

@end 

C'est l'erreur que je reçois à la ligne marquée:

Updater.h:15: error: expected specifier-qualifier-list before 'NSURLDownload' 

Toute idée pourquoi je reçois ce message d'erreur? J'ai inclus le Framework de la Fondation et je suis perplexe quant à la raison pour laquelle le compilateur se plaint, d'autant plus qu'il ne se plaint pas du tout de NSURLConnection. Merci!

Répondre

2

NSURLDownload classe est disponible sur MacOS uniquement, sur iOS, vous devez utiliser NSURLConnection. De docs:

iOS Remarque: La classe NSURLDownload est pas disponible dans iOS, parce que téléchargement directement dans le fichier système est découragée. Utilisez la classe de NSURLConnection au lieu

Si vous avez un grand morceau de données à télécharger et que vous voulez éviter les problèmes de mémoire, vous pouvez utiliser la classe NSFileHandle déléguer la connexion à écrire à la place des données reçues directement sur le disque de le garder en mémoire.

+0

Impressionnant, merci d'avoir signalé cela à moi. J'ai lu les docs, mais j'ai oublié tout cela. Merci encore! – Stunner

1

En lisant dans iOS Remarque: il n'est pas possible d'utiliser NSURLDownload sur ios pour le moment, mais le lien ci-dessous vous montre un moyen simple de télécharger ce que vous voulez du net dans le bac à sable. J'espère que vous aimez. Vive http://www.ifans.com/forums/showthread.php?t=169611

------------ Ci-dessous le lien ------------

// 
// UIDownloadBar.h 
// UIDownloadBar 
// 
// Created by John on 3/20/09. 
// Copyright 2009 Gojohnnyboi. All rights reserved. 
// 

#import <UIKit/UIKit.h> 

@class UIProgressView; 
@protocol UIDownloadBarDelegate; 

@interface UIDownloadBar : UIProgressView { 
    NSURLRequest* DownloadRequest; 
    NSURLConnection* DownloadConnection; 
    NSMutableData* receivedData; 
    NSString* localFilename; 
    id<UIDownloadBarDelegate> delegate; 
    long long bytesReceived; 
    long long expectedBytes; 

    float percentComplete; 
} 

- (UIDownloadBar *)initWithURL:(NSURL *)fileURL progressBarFrame:(CGRect)frame timeout:(NSInteger)timeout delegate:(id<UIDownloadBarDelegate>)theDelegate; 

@property (nonatomic, readonly) NSMutableData* receivedData; 
@property (nonatomic, readonly, retain) NSURLRequest* DownloadRequest; 
@property (nonatomic, readonly, retain) NSURLConnection* DownloadConnection; 
@property (nonatomic, assign) id<UIDownloadBarDelegate> delegate; 

@property (nonatomic, readonly) float percentComplete; 

@end 

@protocol UIDownloadBarDelegate<NSObject> 

@optional 
- (void)downloadBar:(UIDownloadBar *)downloadBar didFinishWithData:(NSData *)fileData suggestedFilename:(NSString *)filename; 
- (void)downloadBar:(UIDownloadBar *)downloadBar didFailWithError:(NSError *)error; 
- (void)downloadBarUpdated:(UIDownloadBar *)downloadBar; 

@end 


// 
// UIDownloadBar.m 
// UIDownloadBar 
// 
// Created by John on 3/20/09. 
// Copyright 2009 Gojohnnyboi. All rights reserved. 
// 

#import "UIDownloadBar.h" 


@implementation UIDownloadBar 

@synthesize DownloadRequest, 
    DownloadConnection, 
    receivedData, 
    delegate, 
    percentComplete; 


- (UIDownloadBar *)initWithURL:(NSURL *)fileURL progressBarFrame:(CGRect)frame timeout:(NSInteger)timeout delegate:(id<UIDownloadBarDelegate>)theDelegate { 
    self = [super initWithFrame:frame]; 
    if(self) { 
     self.delegate = theDelegate; 
     bytesReceived = percentComplete = 0; 
     localFilename = [[[fileURL absoluteString] lastPathComponent] copy]; 
     receivedData = [[NSMutableData alloc] initWithLength:0]; 
     self.progress = 0.0; 
     self.backgroundColor = [UIColor clearColor]; 
     DownloadRequest = [[NSURLRequest alloc] initWithURL:fileURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:timeout]; 
     DownloadConnection = [[NSURLConnection alloc] initWithRequest:DownloadRequest delegate:self startImmediately:YES]; 

     if(DownloadConnection == nil) { 
      [self.delegate downloadBar:self didFailWithError:[NSError errorWithDomain:@"UIDownloadBar Error" code:1 userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"NSURLConnection Failed", NSLocalizedDescriptionKey, nil]]]; 
     } 
    } 

    return self; 
} 

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

    NSInteger receivedLen = [data length]; 
    bytesReceived = (bytesReceived + receivedLen); 

    if(expectedBytes != NSURLResponseUnknownLength) { 
     self.progress = ((bytesReceived/(float)expectedBytes)*100)/100; 
     percentComplete = self.progress*100; 
    } 

    [delegate downloadBarUpdated:self]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    [self.delegate downloadBar:self didFailWithError:error]; 
    [connection release]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    expectedBytes = [response expectedContentLength]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    [self.delegate downloadBar:self didFinishWithData:self.receivedData suggestedFilename:localFilename]; 
    [connection release]; 
} 

- (void)drawRect:(CGRect)rect { 
    [super drawRect:rect]; 
} 

- (void)dealloc { 
    [localFilename release]; 
    [receivedData release]; 
    [DownloadRequest release]; 
    [DownloadConnection release]; 
    [super dealloc]; 
} 


@end 
+0

Merci pour le partage! – Stunner