سؤال

أنا استخدم initwithcontentsofurl. من nsdata. لتحميل صورة من عنوان URL. ومع ذلك، لا أعرف حجم الصورة مسبقا، وأود أن التوقف عن التوقف أو الفشل إذا تجاوز الاستجابة بحجم معين.

هل هناك طريقة للقيام بذلك في ايفون 3.0?

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول

لا يمكنك القيام بذلك مباشرة عبر NSDATA ولكن nsurlconnection. سوف تدعم مثل هذا الشيء عن طريق تحميل الصورة غير متزامنة واستخدام الاتصال: DidreceiveiveData: للتحقق من مقدار البيانات التي تلقيتها. إذا ذهبت فوق الحد الخاص بك فقط إرسال إلغاء رسالة إلى nsurlconnection لإيقاف الطلب.

مثال بسيط: (يتم تعريف المستلزمات في الرأس كما 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top