![](/img/trans.png)
[英]How to get the remaining time of pending UNNotificationRequest?
[英]NSURLConnection how to get time remaining information
我在巫婆中有一个表格单元格,我必须获取有关我正在下载的文件的更多信息,我设法获得了我所需要的,但剩下的时间
这是我想做的一个例子,除了时间计算,我已经做了所有的事情
获取文件大小:
fileSize = [NSNumber numberWithLongLong:[response expectedContentLength]]/(1024*1024);
已下载:
[_responseData length]/(1024*1024)
速度:
double speed = [_responseData length] / ([NSDate timeIntervalSinceReferenceDate] - start);
其中start也是在[NSDate timeIntervalSinceReferenceDate]
设置的
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
剩下的时间: ???
问题:如何计算剩余时间?
我可以想象您需要做的是处理connection:didReceiveData:
委托方法。
@property (atomic, strong) NSDate *lastCheckDate;
@property (atomic, strong) NSDate *startDate;
@property (atomic, strong) NSNumber *fileSize;
@property (atomic, strong) NSNumber *sizeLeft;
- (void) connection:(NSURLConnection *) connection didReceiveData:(NSData *) data
{
NSDate *now = [NSDate date];
double dt = [now timeIntervalSinceDate:_lastCheckDate]; // time since last check
self.lastCheckDate = now;
double db = [data length]; // bytes received
double speed = db / dt;
self.sizeLeft = self.sizeLeft - [NSNumber numberWithDouble:db];
double averageSpeed = [(_fileSize - _sizeLeft) doubleValue] / [now timeIntervalSinceDate:_startDate];
// time left, based on current speed
double timeLeftCurrent = [sizeLeft doubleValue] / speed;
// time left, based on average speed
double timeLeftAverage = [sizeLeft doubleValue] / averageSpeed;
}
在#kender的帮助下,我设法回答了我的问题
@interface TableViewController ()
{
NSTimeInterval start;
}
@property (atomic, strong) NSNumber *sizeLeft;
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//in this method we get the file size and the start time
start = [NSDate timeIntervalSinceReferenceDate];
NSNumber *fileSize;
if ([response expectedContentLength] == NSURLResponseUnknownLength)
{
// unknown content size
fileSize = @0;
}
else
{
fileSize = [NSNumber numberWithLongLong:[response expectedContentLength]];
}
self.sizeLeft = fileSize;
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// _responseData is an NSData that i use to get the size i already downloaded
[_responseData appendData:data];
double speed = [_responseData length] / ([NSDate timeIntervalSinceReferenceDate] - start);
self.sizeLeft = [NSNumber numberWithDouble:[_sizeLeft doubleValue] - [data length]] ;
// time based on current speed
double timeLeft = [_sizeLeft doubleValue] / speed;
NSLog(@"time %.2f",timeLeft);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.