diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m index 3671d6d9af..518a8e0119 100644 --- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m +++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m @@ -311,7 +311,7 @@ + (NSDictionary *)customEnvironment { NSDictionary* result = nil; @synchronized (self) { - result = _customEnvironment; + result = [_customEnvironment copy]; } return result; } diff --git a/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m b/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m index 86411949d5..2caf2cf31e 100644 --- a/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m +++ b/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m @@ -965,19 +965,23 @@ - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event - (void)fireTouchEvent:(NSString *)eventName withTouches:(NSSet *)touches { + if (_component == nil) { + return; + } + NSMutableArray *resultTouches = [NSMutableArray new]; CGPoint accmOffset = CGPointZero; UIView* rootView = _component.weexInstance.rootView; - UIView* view = self.view; - while (view && view != rootView) { - if ([view isKindOfClass:[UIScrollView class]]) { - CGPoint offset = ((UIScrollView*)view).contentOffset; - accmOffset.x += offset.x; - accmOffset.y += offset.y; - } - view = view.superview; - } +// UIView* view = self.view; +// while (view && view != rootView) { +// if ([view isKindOfClass:[UIScrollView class]]) { +// CGPoint offset = ((UIScrollView*)view).contentOffset; +// accmOffset.x += offset.x; +// accmOffset.y += offset.y; +// } +// view = view.superview; +// } for (UITouch *touch in touches) { CGPoint screenLocation = [touch locationInView:touch.window]; @@ -1002,7 +1006,9 @@ - (void)fireTouchEvent:(NSString *)eventName withTouches:(NSSet *)tou } } - [resultTouches addObject:mutableResultTouch]; + if (mutableResultTouch) { // component is nil, mutableResultTouch will be nil + [resultTouches addObject:mutableResultTouch]; + } } [_component fireEvent:eventName params:@{@"changedTouches":resultTouches ?: @[]}]; diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m index 65c50b486f..ee72b35721 100644 --- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m +++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m @@ -244,7 +244,7 @@ - (void)renderWithURL:(NSURL *)url options:(NSDictionary *)options data:(id)data - (void)renderView:(id)source options:(NSDictionary *)options data:(id)data { - _options = options; + _options = [options isKindOfClass:[NSDictionary class]] ? options : nil; _jsData = data; self.needValidate = [[WXHandlerFactory handlerForProtocol:@protocol(WXValidateProtocol)] needValidate:self.scriptURL]; @@ -450,6 +450,9 @@ - (void)_renderWithRequest:(WXResourceRequest *)request options:(NSDictionary *) NSURL *url = request.URL; _scriptURL = url; _jsData = data; + if (![options isKindOfClass:[NSDictionary class]]) { + options = @{}; + } NSMutableDictionary *newOptions = [options mutableCopy] ?: [NSMutableDictionary new]; if (!newOptions[bundleUrlOptionKey]) {