我正在使用NSURLSessionDownloadTask
后台会话来实现我的所有REST请求.这样我可以使用相同的代码,而不必考虑我的应用程序在后台或前台.
我的后端已经死了一段时间了,我借此机会测试了NSURLSession
超时的行为方式.
令我惊讶的是,我的NSURLSessionTaskDelegate
回调都没有被调用过.无论我在上面NSURLRequest
或上面设置什么超时NSURLSessionConfiguration
,我都没有从iOS收到任何回调,告诉我请求确实以超时完成.
也就是说,当我开始NSURLSessionDownloadTask
一个后台会话时.应用程序在后台或前台发生相同的行为.
示例代码:
- (void)launchDownloadTaskOnBackgroundSession {
NSString *sessionIdentifier = @"com.mydomain.myapp.mySessionIdentifier";
NSURLSessionConfiguration *backgroundSessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfiguration:sessionIdentifier];
backgroundSessionConfiguration.requestCachePolicy = NSURLRequestReloadIgnoringCacheData;
backgroundSessionConfiguration.timeoutIntervalForRequest = 40;
backgroundSessionConfiguration.timeoutIntervalForResource = 65;
NSURLSession *backgroundSession = [NSURLSession sessionWithConfiguration:backgroundSessionConfiguration delegate:self delegateQueue:[NSOperationQueue mainQueue]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.timeout.com/"]];
request.timeoutInterval = 30;
NSURLSessionDownloadTask *task = [backgroundSession downloadTaskWithRequest:request];
[task resume];
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
NSLog(@"URLSession:task:didCompleteWithError: id=%d, error=%@", task.taskIdentifier, error);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用默认会话时,我会在30秒后收到错误回调(我在请求级别设置的超时).
示例代码:
- …
Run Code Online (Sandbox Code Playgroud) ios nsurlsession nsurlsessionconfiguration nsurlsessiondownloadtask ios7.1
背景
在iOS6中,我曾经MKPolygon
在MKMapView上添加了几个(覆盖)并提供了特定MKOverlayView
的mapView:viewForOverlay:
回调(参见MKMapViewDelegate类参考).这个特定视图的工作是使用Quartz 2D用自定义图案填充多边形.它做得很好.
现在,这似乎不再像以前那样在iOS7上运行了.
因为mapView:viewForOverlay:
在iOS SDK7 MKOverlayView
及其子类中已弃用,我尝试切换到mapView:rendererForOverlay:
子类并且MKOverlayRenderer
没有成功:遇到的问题是相同的.
因此,以下示例代码将使用MKOverlayView,但您可以在下面的代码中轻松地使用渲染器/渲染器替换视图/视图,并获得相同的效果.
遇到问题
我已将问题减少到能够重现它的最小代码示例,结果如下:
在iOS6上(正如预期的那样):
在iOS7上(不是预期的):
我希望我的多边形填充,总是使用相同的模式,并且模式的大小在屏幕上保持不变,与地图的缩放级别无关.
唉,在iOS7上,当在地图上添加多个叠加时,屏幕上的图案尺寸会减小,同时缩小多边形的某些部分.只有在以最大缩放级别放大时,图案才会获得正确的尺寸.
问题没有出现:
mapView:insertOverlay:atIndex:
)即使只添加了一个图案覆盖层以及其他未图案化的覆盖层,问题似乎也会发生.
代码示例
MTViewController.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface MTViewController : UIViewController<MKMapViewDelegate>
@property (strong, nonatomic) IBOutlet MKMapView *mapView;
@end
Run Code Online (Sandbox Code Playgroud)
MTViewController.m
#import "MTViewController.h"
#import <MapKit/MapKit.h>
#import "MTPolygonWithPatternOverlayView.h"
@implementation MTViewController
- (void)dealloc {
self.mapView.delegate = nil;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; …
Run Code Online (Sandbox Code Playgroud) 如何使用ImageMagick为具有透明背景的黑色PNG图像着色?
我想使用ImageMagick的convert
命令,允许脚本一次处理数百个图标。
我在将 TrueType 字体(例如 Arial)的字符转换java.awt.Shape
为进一步的手动渲染(作为 EPS,但没关系)时遇到问题。
我已将执行此操作的程序分解为多个小进程,以找出问题的出处,在我看来,问题似乎出自从字体加载字形的过程。
我正在使用以下代码片段加载字体(Arial,来自 msttcore 包)并将字符转换Ö
为Shape
稍后可以使用的字符:
Font font = new Font("Arial", Font.PLAIN, 24);
AttributedString attributedString = new AttributedString("Ö");
attributedString.addAttribute(TextAttribute.FONT, font, 0, "Ö".length());
FontRenderContext fontRenderContext = new FontRenderContext(null, false, false);
TextLayout layout = new TextLayout(attributedString.getIterator(), fontRenderContext);
Shape shape = layout.getOutline(null);
Run Code Online (Sandbox Code Playgroud)
我也尝试使用以下代码片段,但它给了我相同的结果:
Font font = new Font("Arial", Font.PLAIN, 24);
FontRenderContext fontRenderContext = new FontRenderContext(null, false, false);
GlyphVector glyphVector = font.createGlyphVector(fontRenderContext, text);
Shape shape = glyphVector.getOutline();
Run Code Online (Sandbox Code Playgroud)
之后,我使用shape.getPathIterator(null)
并迭代它给我的段以打印点坐标。我在三个不同的系统上这样做:
我试图在Azure中尝试一些不同的配置可能性,当我在交通管理器后面使用多个网站(App Service)时,我试图正确配置SSL自定义域.
没有问题,我能够:
但是,当我尝试在Traffic Manager后面添加第二个App Service时,我遇到以下问题:
1.无法将我的自定义域(subdomain.mydomain.com)附加到第二个App Service(subdomain2.azurewebsites.net).错误信息是:
无法更新主机名绑定:
主机名subdomain.mydomain.com已分配给另一个Azure网站:subdomain1.
如果我不能在它监听的域列表中添加subdomain.mydomain.com,我不明白SSL如何与第二个网站一起工作(事实上,如果你不添加它,它就不会).
2.无法将第二个App Service添加到Traffic Manager的端点列表中.错误信息是:
无法将配置更改保存到Traffic Manager配置文件"mytrafficmanager".
错误:某些提供的Azure网站端点无效:在流量管理器配置中检测到一个或多个冲突.多个域指向"西欧"区域:subdomain1.azurewebsites.net,subdomain2.azurewebsites.net
但是,当我阅读文档时,似乎可以在同一区域中添加多个端点:
如果您的配置文件在同一Azure区域中包含多个端点,则定向到该区域的流量将均匀分布在可用端点上(基于配置的端点启用/禁用状态和正在进行的端点监控).如果您希望在区域内使用不同的流量分布,则可以使用嵌套的流量管理器配置文件来实现.
在MSDN文档中使用Traffic Manager和App Service的示例仅显示如何使用一个 App Service执行此操作.
我做错了吗?如果是,在Azure中的流量管理器后面添加多个网站/应用服务的正确方法是什么?