我正在使用Xamarin.iOS应用程序。我们有一个问题,即我们的LaunchScreen有时不加载我们在其中显示的图像。该错误是非常短暂的,仅某些用户有时会发生。
事实是,当图像首次加载到设备上时,总是会显示出来。另一方面,如果该图像未显示在设备上,则可以多次重新启动该应用程序而无需加载该图像。有时,它有助于重启设备。有时,更新/重新安装可以解决此问题,有时则不能。
我们正在加载的图像资源不包含在按需捆绑资源中,而是包含在资产目录中。
我已经为这个错误苦苦挣扎了一段时间了。有时我认为我已修复它,但随后突然又出现了。
我确实看到启动屏幕正在加载,因为显示了背景色。这只是我遇到问题的图像。
我看过这篇文章,但这似乎不是一个问题,因为我在App Store的生产版本中遇到的问题。在调试版本中,启动画面每次加载都很好
有人可以指出我应该看的方向吗?如果需要,我可以为xib启动屏幕或资产目录的json文件共享一些代码。
在iOS 10.2中,当我们尝试与几个不同的api进行通信时,我们会发现此错误.奇怪的是,我们有时只会在同一个网址的200个请求中有2个进行此操作.但另一方面,我有时可以做3000次api通话,但没有看到问题.
据我所知,这与ATS有关.输出还告诉我们,我们得到一个与ATS相关的错误代码:kCFStreamErrorCodeKey = -9806.
但是我不明白这与ATS有什么关系,因为有几点:
我们尝试以不同的方式创建异常,既允许任意加载,又为域创建异常.
即使在服务器具有有效证书时不需要,我们也尝试创建异常
这就是我们为域创建例外的方式.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>deezer.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)
这就是我们启用仲裁负载的方式:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Run Code Online (Sandbox Code Playgroud)
另一个奇怪的是我们只在iOS 10(10.2)中看到这个.当我们在iOS 9.3中进行测试时,一切都按预期工作.
我已经制作了一个示例应用程序来重现这一点.
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self Perform];
}
int i = 0;
- (void) Perform
{
NSURLSessionConfiguration *defaultConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *sessionWithoutADelegate = [NSURLSession sessionWithConfiguration:defaultConfiguration];
NSURL *url …Run Code Online (Sandbox Code Playgroud) 在学校,我们要实现我们自己的类 MultiMap。
当我实现 remove 方法时,我遇到了一些麻烦。
我的问题是当我调用 remove 方法时,set.Remove(value) 返回 false。就像集合不包含对象一样。
我试图写出来自 main 的对象引用和来自 MultiMap 类的对象引用,这些对象似乎是一样的。
我在这里缺少什么?
提前致谢
这是我的地图代码:
public class MultiMap<K, V> {
private final Map<K, Set<V>> map = new HashMap<>();
public MultiMap() {
}
public String toString() {
StringBuilder sb = new StringBuilder();
Set<K> keys = map.keySet();
for (K k : keys) {
sb.append("key ");
sb.append(k);
sb.append(" Value ");
sb.append(map.get(k));
}
return sb.toString();
}
public int size() {
return map.size();
}
public boolean put(K key, V value) {
Set<V> …Run Code Online (Sandbox Code Playgroud)