首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MKTilelOverlay中的NSCache

MKTilelOverlay中的NSCache
EN

Stack Overflow用户
提问于 2015-01-17 05:24:08
回答 1查看 404关注 0票数 1

我正在尝试向我的子类MKTileOverlay类添加一个NSCache

代码语言:javascript
复制
@interface WMSTileOverlay ()

@property NSCache *cache;

@end

@implementation WMSTileOverlay

-(instancetype)initWithURLTemplate:(NSString *)URLTemplate {
    self = [super initWithURLTemplate:URLTemplate];

    if (self) {
        DLog(@"setting cache");
        self.cache = [[NSCache alloc] init];
        DLog(@"original self.cache: %@", self.cache);

    }

    return self;
}
-(void)loadTileAtPath:(MKTileOverlayPath)path result:(void (^)(NSData *, NSError *))result {
if (!result) {
    return;
}

NSData *cachedData = [self.cache objectForKey:[self URLForTilePath:path]];
if (cachedData) {
    DLog(@"Cached tile found!!!!!!!");
    result(cachedData, nil);
} else {

    NSURLRequest *request = [NSURLRequest requestWithURL:[self URLForTilePath:path]];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (connectionError) {
            result (nil, connectionError);
        }
        else {
            DLog(@"adding data to cache for tile %@", [self URLForTilePath:path]);
            DLog(@"cache: %@", self.cache);
            [self.cache setObject:data forKey:[self URLForTilePath:path]];

            if ([self.cache objectForKey:[self URLForTilePath:path]]) {
                DLog(@"found the data for url path");
            }
            result (data, nil);
        }
    }];
}

}

但我从未见过从缓存中获取磁贴的情况(我从未看到日志消息“找到高速缓存磁贴!”)。

我可能做错了什么?

编辑:我添加了日志信息

我添加了一堆日志。我检查是否创建了缓存,以及它是否与我为查找磁贴而引用的缓存相同。我还检查数据是否已添加到缓存中,并在添加后立即找到它:

代码语言:javascript
复制
DEBUG | -[WMSTileOverlay initWithMapContext:andLayer:] | original self.cache: <NSCache: 0x1bf59e10>
DEBUG | __40-[WMSTileOverlay loadTileAtPath:result:]_block_invoke | adding data to cache for tile service=wms&version=1.1.1&request=GetMap&SRS=EPSG:4326&layers=displayimg&mode=tiled&tile=30295+46150+17&format=image/png&transparent=true
DEBUG | __40-[WMSTileOverlay loadTileAtPath:result:]_block_invoke | cache: <NSCache: 0x1bf59e10>
DEBUG | __40-[WMSTileOverlay loadTileAtPath:result:]_block_invoke | found the data for url path
EN

回答 1

Stack Overflow用户

发布于 2016-02-20 15:45:31

这是因为一旦加载了特定路径的磁贴,MapKit就不会在同一会话中再次为该路径调用loadTileAtPath,我认为MapKit已经以某种方式在内部缓存了加载的磁贴。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27992971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档