NSURLDownload не обнаруживается в SDK 4.2 - PullRequest
0 голосов
/ 15 декабря 2010

Эй, ребята, вот мой код:

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

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

}

@end

Это ошибка, которую я получаю в отмеченной строке:

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

Любая идея, почему я получаю это сообщение об ошибке?Я включил Foundation Framework и озадачен тем, почему компилятор жалуется, особенно учитывая, что он вообще не жалуется на NSURLConnection.Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 декабря 2010

Класс NSURLDownload доступен только на MacOS, на iOS вы должны использовать NSURLConnection. От документов :

Примечание для iOS : класс NSURLDownload недоступно в iOS, потому что загрузка прямо в файл Система не рекомендуется. Использовать NSURLConnection класс вместо

Если у вас есть большой кусок данных для загрузки и вы хотите избежать проблем с памятью, вы можете использовать класс NSFileHandle в делегате соединения, чтобы записать полученные данные непосредственно на диск вместо того, чтобы хранить их в памяти.

1 голос
/ 11 сентября 2011

Как вы читаете в iOS, обратите внимание: пока нельзя использовать NSURLDownload на ios, но приведенная ниже ссылка показывает простой способ загрузки всего, что вы хотите, из сети в «песочницу» приложения.Надеюсь, вам понравится.Ура http://www.ifans.com/forums/showthread.php?t=169611

------------ Ниже приведена ссылка ------------

//
//  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
...