WKWebView持久存储Cookie

我在我的本地iPhone应用程序,允许login/注册的网站上使用WKWebView,并将会话信息存储在Cookie中。 我想弄清楚如何持久存储cookie信息,所以当应用程序重新启动时,用户仍然可以访问他们的Web会话。 我在应用程序中有2个WKWebViews,他们共享一个WKProcessPool。 我从一个共享进程池开始: WKProcessPool *processPool = [[WKProcessPool alloc] init]; 然后对于每个WKWebView: WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init]; theConfiguration.processPool = processPool; self.webView = [[WKWebView alloc] initWithFrame:frame configuration:theConfiguration]; 当我使用第一个WKWebViewlogin时,稍后再传递给第二个WKWebView,这个会话被保留,所以cookies被成功共享。 但是,当我重新启动应用程序时,会创build一个新的进程池,会话信息被销毁。 有什么办法让会话信息通过应用程序重新启动持续?

alignment到页面底部的button与移动Safari的菜单栏冲突

我正在build立一个在多个平台上必须function性和漂亮的门户网站。 其中一个平台是IOS Safari,这是我遇到的一个问题。 在我的代码中,我将两个浮动buttonalignment的宽度和高度为100% 这一切工作正常,我的button显示完全像他们应该在页面的底部。 但是,当我点击button从移动Safari的紧凑视图切换到全视图,我的button隐藏在底部的导航栏后面! 当用户点击屏幕底部的10%时,safari mobile是否正常显示扩展菜单? 我怎样才能避免这一点? 在这个gif中,你可以在IOS模拟器上看到问题: 正如你所看到的问题只发生在一个button在视图的下10%。 这只是一个正常的button,我的代码被几个开发人员三重检查,它没有错误。

耳机拔出时是否有事件发生?

在testing过程中,客户注意到拔下耳机时,iPhone中的video播放会暂停。 他想要类似的audio播放function,也许可以popup消息。 有没有人知道是否有一种事件我可以挂钩使这成为可能?

presentViewController显示黑色页面

– (IBAction)submitButtonClicked:(id)sender{ NSLog(@"here"); SuccessOrFailViewController *sfvc = [[SuccessOrFailViewController alloc] init]; [self presentViewController:sfvc animated:NO completion:NULL]; } 我试图打开一个新的页面,当用户点击提交button在应用程序。 但是,这完全打开了黑屏,没有任何东西。 我如何让它打开viewController呢?

“stringByAppendingPathComponent”不可用

我收到错误 'stringByAppendingPathComponent' is unavailable: Use 'stringByAppendingPathComponent' on NSString instead. 当我尝试做 let documentsFolder = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String let databasePath = documentsFolder.stringByAppendingPathComponent("test.sqlite") 这显然以前工作的人,但它现在不适用于我在Xcode 7testing版5。 苹果开发者论坛上的这个线程有build议使用扩展或直接转换为NSString 。 但是,如果我把它转换成NSString let databasePath = documentsFolder.stringByAppendingPathComponent("test.sqlite" as NSString) 那么我得到的错误 'NSString' is not implicitly convertible to 'String'… 它给了我通过插入as String “修复它”的选项,这使我们回到原来的错误。 这也发生在stringByAppendingPathExtension 。 我该怎么办?

不支持导航控制器 – 执行segse

我在故事板中创build了一个新的导航控制器(不是以编程方式),并将其设置为“根视图控制器”为一个普通的UIViewController,并添加一个button,它说 – 转发到下一个视图控制器(这第二个视图控制器是视图控制器,我想这将有一个后退button链接到初始视图控制器)。 现在,每当我尝试链接到下一个视图控制器的button – “推动导航控制器不支持”。 请帮助我,谢谢 编辑:我不小心子类UINavigationController,而不是我的class级UIViewController。 不pipe怎样,谢谢你。

使用转换为NSData时保留NSDictionary键的顺序

我有以下情况: NSDictionary *params = @{ @"Checkout" : @{ @"conditions" : @{@"Checkout.user_id" : @1}, @"order" : @{@"Checkout.id" : @"DESC"} }, @"PaymentState" : @[], @"Offer" : @[] }; 这个字典包含一个web服务请求传递一个JSONstring的web服务URL的参数。 我使用NSJSONSerialization类获取JSONstring,如下所示: NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:nil]; NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 问题是:jsonString“keys”按照与原始params字典键顺序不同的顺序sorting,如下所示: { "Offer":[], "PaymentState":[], "Checkout":{ "conditions":{"Checkout.user_id":6}, "order":{"Checkout.id":"DESC"} } } 也就是说,“PaymentState”和“Offer”键首先在jsonString中,我需要保持原来的顺序。 这非常重要,像这样: { "Checkout":{ […]

即使configuration正确,URLForUbiquityContainerIdentifier也会返回nil

我有这个问题,URLForUbiquityContainerIdentifier在某些情况下返回零,即使用户已经设置正确的一切。 我的代码: dispatch_async(someQueue, ^{ if (![[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]) { ErrLog(@"iCloud container not available."); return; } dispatch_async(dispatch_get_main_queue(), ^{ […] }); }); 有人遇到同样的问题吗? 我将这个容器标识设置为零,这个标识应该按照苹果的文档工作,但是我不再那么确信。 此外,这个代码适用于大多数用户,但不知何故不适合每个人。

卸载应用程序不会删除应用程序组数据。我是否必须手动删除应用程序组容器和内容?

我创build了第一次在iOS 8中引入的Today Extension 。 要在Today extension和它的container App之间共享数据,我定义了一个app group ,并将它们绑定到这个组。 (其实我添加了一个embedded式的框架也重复使用两边的代码。) 这个方法的细节在Apple的文档中有描述。 我创build了一些核心数据模型,并将其存储为组容器上的sqlite。 然后,一切都按我的想法工作。 但是,当我卸载容器应用程序,仍然有共享容器,它的内容在我的iPhone上。 我认为当应用程序组的最后一个成员被卸载时,这个容器应该被自动删除。 在我的情况下,应用程序组的成员只有一个应用程序,所以,卸载这个应用程序应该不得不清除共享容器。 我错了吗? PS。 我无法find一种方法来删除这个共享容器作为一个用户。 只有有权访问应用程序组的开发人员才能通过编程删除此容器。

在更新UITableView的时候,会丢失新的可见行的Missing单元格

我在删除一行时遇到了崩溃。 // Updating my data model …. // apply the updates self.tableView.beginUpdates() self.tableView.deleteRows(at: indexPathsToDelete, with: .automatic) self.tableView.endUpdates() 重现步骤 – 添加行 – 删除行,具体确保当前屏幕之外有一些行(当删除成功时屏幕将显示在屏幕上) – 重复直到崩溃发生 它不总是发生,所以我最好的猜测是,只有当它试图加载的单元格被回收时才会发生 这是在Xcode 8.0的10.0模拟器中 *** Assertion failure in -[UITableView _updateWithItems:updateSupport:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UITableView.m:3149 Missing cell for newly visible row 2 (null) 代码为cellForRowAt if isMultipe{ let cell = tableView.dequeueReusableCell(withIdentifier: DetailsTableViewCell.defaultIdentifier, for: indexPath) as! DetailsTableViewCell return […]