小编Thi*_* D.的帖子

使用后台配置时,NSURLSessionTask在超时后永远不会回调

我正在使用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

20
推荐指数
1
解决办法
1万
查看次数

使用CGPattern填充MKPolygon时,多边形叠加相互干扰(使用Quartz 2D)

背景

在iOS6中,我曾经MKPolygon在MKMapView上添加了几个(覆盖)并提供了特定MKOverlayViewmapView:viewForOverlay:回调(参见MKMapViewDelegate类参考).这个特定视图的工作是使用Quartz 2D用自定义图案填充多边形.它做得很好.

现在,这似乎不再像以前那样在iOS7上运行了.

因为mapView:viewForOverlay:在iOS SDK7 MKOverlayView及其子类中已弃用,我尝试切换到mapView:rendererForOverlay:子类并且MKOverlayRenderer没有成功:遇到的问题是相同的.

因此,以下示例代码将使用MKOverlayView,但您可以在下面的代码中轻松地使用渲染器/渲染器替换视图/视图,并获得相同的效果.

遇到问题

我已将问题减少到能够重现它的最小代码示例,结果如下:

在iOS6上(正如预期的那样): 在iOS6上(如预期的那样)

在iOS7上(不是预期的): 在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)

cgcontext mapkit quartz-2d ios ios7

10
推荐指数
1
解决办法
969
查看次数

如何使用ImageMagick为黑色透明的PNG图标着色

如何使用ImageMagick为具有透明背景的黑色PNG图像着色?

用例:
您有几个这样的PNG图像:
源图像

我想像这样给它们着色:
希望的结果

我想使用ImageMagick的convert命令,允许脚本一次处理数百个图标。

icons imagemagick imagemagick-convert

6
推荐指数
2
解决办法
813
查看次数

在某些系统上使用 java 渲染 TrueType 字体中的强调字符看起来是错误的

我在将 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)并迭代它给我的段以打印点坐标。我在三个不同的系统上这样做:

  • Mac OS X Mountain Lion …

java fonts awt truetype

5
推荐指数
1
解决办法
1349
查看次数

如何使用 ImageMagick 为 PNG 图像添加透明度

如何使用 ImageMagick 为 PNG 图像添加透明度?
如何使用 ImageMagick 降低 PNG 文件的不透明度?
如何使用 ImageMagick 修改 PNG 的 alpha 通道?

用例:
您有几个这样的 PNG 图像(源不透明度:100%)
源图像

以及如何增加它们的透明度(目标不透明度:70%)
希望的结果

使用 ImageMagick 的convert命令,允许一次编写和处理数百个图标。

(注意:背景图案仅用于突出透明度)

icons transparency alpha imagemagick imagemagick-convert

4
推荐指数
1
解决办法
1588
查看次数

如何使用流量管理器后面的多个App Service设置自定义域的SSL?

我试图在Azure中尝试一些不同的配置可能性,当我在交通管理器后面使用多个网站(App Service)时,我试图正确配置SSL自定义域.

没有问题,我能够:

  1. 将自定义域(subdomain.mydomain.com)附加到Azure应用服务(subdomain1.azurewebsites.net)
  2. 将自定义域(subdomain.mydomain.com)附加到流量管理器(subdomain.trafficmanager.net)后面的Azure应用服务(subdomain1.azurewebsites.net)(此处提及)

但是,当我尝试在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中的流量管理器后面添加多个网站/应用服务的正确方法是什么?

dns ssl azure azure-web-sites azure-traffic-manager

1
推荐指数
1
解决办法
1536
查看次数