我正在尝试使用https:// URL将页面加载到iOS9上的UIWebView中.加载的页面包括来自不安全服务器的CSS和图像.
例如,页面加载:HTTPS://www.example.com/包括的样式表的http://www.example.com/style.css和图像的http://www.example.com/image.jpg
如果通过不安全连接(常规http)加载原始页面,一切正常.通过HTTPS和HTTP,一切都可以在iOS8上运行.
我没有设定NSAppTransportSecurity到NSAllowsArbitraryLoads应用plist文件:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Run Code Online (Sandbox Code Playgroud)
虽然通过HTTPS加载页面时,图像加载正常,但CSS文件不加载.似乎UIWebView阻止从安全页面加载不安全的资源.
是否有任何UIWebView设置允许通过不安全的连接加载CSS?
我正在尝试使用OCMock的stub和Do方法编写一段代码.
在这种情况下,正在测试UIImageView扩展类.我想检查扩展名为[self setImage:]并使用非零参数(稍后将使用其他图像比较).
使用OCMock的andDo方法时,在块完成后,测试将与EXC_BAD_ACCESS崩溃.
id mockView = [OCMockObject mockForClass:[UIImageView class]];
[[[mockView stub] andDo:^(NSInvocation *invocation)
{
UIImage *img;
[invocation getArgument:&img atIndex:2]; <---- line causing the exception
somebodySetImage |= (img != nil);
}] setImage:OCMOCK_ANY];
[mockView do_something_that_calls_setImage];
Run Code Online (Sandbox Code Playgroud)
我现在发现的唯一解决方案是使用andCall而不是andDo,但这使测试变得复杂.
我可以用andDo避免崩溃吗?
更新 嗯,我会尝试在这里给出一个更好的例子:这是测试代码的新部分:
- (void)testDownloadingThumbnail
{
PInfo *_sut = [[PInfo alloc] init];
__block id target = nil;
id mock = [OCMockObject mockForClass:[NSOperationQueue class]];
[[[mock expect] andDo:^(NSInvocation *inv)
{
NSInvocationOperation *op;
[inv getArgument:&op atIndex:2]; …Run Code Online (Sandbox Code Playgroud) 我想斯威夫特的数组转换Int64成NSArray与NSNumber价值观.
@interface A : NSObject
- (void)bar:(NSArray *)tips;
@end
Run Code Online (Sandbox Code Playgroud)
Swift类继承了这个Objective-C类:
class B : A {
func foo(tips : [Int64]) {
self.bar(tips)
}
}
Run Code Online (Sandbox Code Playgroud)
Swift代码无法编译时出现以下错误:
Type '[Int64]' does not conform to protocol 'AnyObject'
Run Code Online (Sandbox Code Playgroud)
我怎么能转换[Int64]成NSArray与NSNumber实例?
PS我尝试了很多东西,找不到一个简单的方法来做到这一点:
self.bar(NSArray(array: tips))
self.bar(tips as NSArray)
Run Code Online (Sandbox Code Playgroud)
编辑:这个问题涉及不涉及试图建立新NSArray的独立的Int64对象,但现有的数组转换[Int64]成NSArray
我的一个库中有一个数据管理器类。到目前为止,它一直与执行者合作并拥有自己的执行者。现在该类正在转换为协程。
当管理器必须异步初始化数据时,就会出现问题,如下例所示。为了执行挂起函数,对的调用suspendedInit必须包含在launch. 这里的问题是管理器没有自己的协程作用域。
有一些我正在看但不喜欢的:
DataManager构造函数并使用它。问题是用户DataManager尚不支持协程,因此没有自己的范围。DataManager实施CoroutineScope并创建自己的范围。正如文档所记录的那样,不鼓励这样做CoroutineScope。这个问题的推荐解决方案是什么?
class DataManager {
init {
suspendedInit()
}
private suspend fun suspendedInit() = withContext(Dispatchers.IO) {
/* some long asynchronous operations here */
}
}
Run Code Online (Sandbox Code Playgroud) 如何用XIB替换故事板?
在尝试创建动态视图及其控制器时,我失去了新故事板的所有优点.现在,当我尝试将其从项目中删除时,我创建了一个带有自己的控制器的新XIB,并将其替换为项目设置:

现在,在尝试运行应用程序时,它崩溃了,日志显示以下内容:
2012-04-08 14:50:16.567 Bazaart[11340:15203] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIApplication 0x8c15c20> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.'
Run Code Online (Sandbox Code Playgroud)
这是代码:UIRootWindow:
#import <UIKit/UIKit.h>
@interface UIRootWindow : UIViewController
@end
Run Code Online (Sandbox Code Playgroud)
及其相应的实施:
#import "UIRootWindow.h"
@implementation UIRootWindow
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)viewDidUnload {
[super viewDidUnload];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
@end
Run Code Online (Sandbox Code Playgroud)
编辑:
我有菲利普建议的窗口(见下文).但是......我这样做的方式似乎不是最好的.我做得对吗?
UIRootWindow *wnd = …Run Code Online (Sandbox Code Playgroud) 我使用该方法(这个问题的结尾)从设备中检索视频.它做了什么,它找到了库中的第一个视频,创建了导出会话并将视频导出到MOV文件中.
在两次运行应用程序(在方法运行之间停止应用程序)之后,将比较两个生成的文件.两个文件都不同.我期待两个文件都是相同的,因为正在导出相同的资产.
还有一点:在同一个应用程序运行中运行该方法两次,给出了两个相同的文件.
是否可以让PhotoKit在每次运行时导出相同的文件?
- (void)testVideoRetrievalSO {
PHAsset *oneVideo = [[PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:nil] firstObject];
PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
options.networkAccessAllowed = YES;
options.deliveryMode = PHVideoRequestOptionsDeliveryModeHighQualityFormat;
options.version = PHVideoRequestOptionsVersionOriginal;
[[PHImageManager defaultManager] requestExportSessionForVideo:oneVideo
options:options
exportPreset:AVAssetExportPresetPassthrough
resultHandler:
^(AVAssetExportSession * _Nullable exportSession, NSDictionary * _Nullable info) {
NSLog(@"Video test run on asset %@", oneVideo.localIdentifier);
NSString *folderPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSString *fileName = [[[NSUUID UUID] UUIDString] stringByAppendingPathExtension:@"mov"];
NSString *tempFile = [folderPath stringByAppendingPathComponent:fileName];
NSURL *tempFileUrl = [NSURL fileURLWithPath:tempFile];
[exportSession setOutputFileType:AVFileTypeQuickTimeMovie];
[exportSession setOutputURL:tempFileUrl];
[exportSession exportAsynchronouslyWithCompletionHandler:^{ …Run Code Online (Sandbox Code Playgroud) 我在我维护的代码中看到以下内容:
func parse(values: NSMutableDicationary) {
let data = try? JSONSerialization.data(withJSONObject: values, options: JSONSerialization.WritingOptions())
}
Run Code Online (Sandbox Code Playgroud)
注意该方法不会标记为抛出任何东西,也不会处理错误.代码确实使应用程序崩溃了.
我想弄清楚try?(尝试用问号)意味着什么.
谷歌搜索或StackOverflowing没有返回任何有用的信息.
那么,try?Swift的意思是什么?
我正在尝试使用 Kotlin 的[Result][1]类型。虽然在成功的情况下它不会返回任何值。我无法让它返回值。以下行给我带来了麻烦:complete(Result.success()). 它不编译。我尝试了两者Result<Void>,Result<Nothing>但无法使其正常工作。
有关如何使其工作的任何建议?
package me.test.app
import android.util.Log
class Test {
fun foo(complete: (Result<Nothing>) -> Unit) {
if (Math.random() > 0.5) {
complete(Result.success())
} else {
complete(Result.failure(Throwable("too low")))
}
}
fun bar() {
foo { result ->
result.fold({
Log.i("APP", "Success")
})
{
Log.i("APP", "Failure")
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我试图了解 Kotlin 中构造函数参数的生命周期。给定以下代码,FooFactory垃圾收集器何时可以收集类实例?
既然FooFactory延迟了使用,运行时会知道什么时候释放它吗?
或者如果编译器不知道何时发布FooFactory并且它将永远存在,这会造成泄漏吗?
class Foo {
fun doStuff() {}
}
class FooFactory {
fun getFoo() : Foo {
return Foo()
}
}
class User(factory: FooFactory) {
val x: Foo by lazy {
factory.getFoo()
}
}
val user = User(FooFactory())
Thread.sleep(100)
user.x.doStuff()
Thread.sleep(100)
Run Code Online (Sandbox Code Playgroud) ios ×7
kotlin ×3
objective-c ×3
swift ×2
xcode ×2
android ×1
arrays ×1
constructor ×1
coroutine ×1
debugging ×1
exception ×1
generics ×1
http ×1
interop ×1
ios9 ×1
iphone ×1
lifecycle ×1
lumberjack ×1
macos ×1
ocmock ×1
ocunit ×1
photokit ×1
ssl ×1
syntax ×1
try-catch ×1
uiscrollview ×1
uiwebview ×1
video ×1
xcode4.3 ×1