小编ios*_*ude的帖子

Cordova/Ionic在每次运行时在config.xml中创建<allow-navigation>垃圾

运行启用了Ionic和实时重新加载的应用程序时,它会自动allow-navigation向config.xml 添加一个新条目,其中包含我的本地IP地址和端口.

一段时间后,这会导致config.xml中出现大量垃圾,特别是如果有多个开发人员可能会使用多个开发计算机来运行应用程序.由于该文件包含在Git(或其他VCS)中,并且在提交之前没有人关心删除这些东西,因此经常会产生合并冲突,这很容易修复但非常烦人.

Ionic可以在其他地方存储这些设置,以避免每次有人运行应用程序时都会污染config.xml吗?像本地(用户特定)配置?

cordova ionic-framework

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

单击空白区域后键盘打开

我的应用程序使用Ionic 1.3.2构建的一个奇怪的问题只在iOS上发生.

当我点击textarea输入时,键盘像往常一样打开,这部分按预期工作,input元素获得焦点.

但是,当我在任何输入之外点击屏幕的某些区域时,比如我所拥有的文本字段下方20px,键盘要么操作要么关闭,如果它已经打开但是input没有得到焦点,则立即重新打开document.activeElement实际上返回body元素(在Safari检查器中检查).

因此,在这种模式下,我可以输入我想要的任何内容,但输入的文本不会出现在任何地方,好像我在无处打字(这有点奇怪).

此外,如果我在其中一个地方点击2-3次,整个应用程序会在EXC_BAD_ACCESS内部一些UIWebView内部崩溃:

* thread #1: tid = 0x35ea78, 0x000000010c2c3acb libobjc.A.dylib`objc_msgSend + 11, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
  * frame #0: 0x000000010c2c3acb libobjc.A.dylib`objc_msgSend + 11
    frame #1: 0x000000010ec56024 UIKit`-[UITextInteractionAssistant(UITextInteractionAssistant_Internal) swallowsDoubleTapWithScale:atPoint:] + 264
    frame #2: 0x000000010ea4ce75 UIKit`-[UIWebDocumentView shouldSelectionAssistantReceiveDoubleTapAtPoint:forScale:] + 91
    frame #3: 0x000000010f1b930a UIKit`_UIWebDoubleTapAtLocation + 369
    frame #4: 0x000000010ec3d409 UIKit`-[UIGestureRecognizerTarget _sendActionWithGestureRecognizer:] + 57
    frame #5: 0x000000010ec451a8 UIKit`_UIGestureRecognizerSendTargetActions + 109
    frame #6: 0x000000010ec42c77 UIKit`_UIGestureRecognizerSendActions + 227 …
Run Code Online (Sandbox Code Playgroud)

safari uiwebview ios cordova ionic-framework

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

如何对iOS视图控制器进行单元测试?

我怎么能在iOS应用程序中对我的视图控制器(UIViewController子类)进行单元测试?

在过去的几天里,我一直在广泛搜索这个主题,但我仍然无法理解这样做的正确方法.

似乎至少有三种单元测试视图控制器逻辑的方法:

  • 公开要进行单元测试的私有操作和IBOutlet(在头文件中声明它们).

  • 使用类别,例如Tests,从单元测试中访问私有操作和IBOutlet.

  • 不要暴露任何东西,而是通过标题或其他公共属性查找按钮和其他视图,并通过公共UIView方法模拟用户交互(例如模拟用户点击按钮); 然后观察可见状态.

    我没有在这个上找到很多资源,但objc.io上有一个例子.

现在,说实话,我真的不喜欢前两个,因为据我所知,单元测试不应该测试对象的内部(即私有方法),并且仅仅为了测试而宣布它们是公开的喜欢最好的做法.我通常将IBActions和IBOutlets保留在实现中,但现在我突然只能将所有内容公开,因为我正在添加测试...

我认为可能还有另一种选择:从我的视图控制器中移动尽可能多的逻辑到独立组件并测试它们(让控制器未经测试或大部分未经测试).这似乎是一个不错的主意,但我将不得不进行大量的重构(我目前正在为一个未编入测试的项目添加单元测试).

所以我想知道,测试视图控制器的最佳方法是什么?

unit-testing uiviewcontroller ios

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

从Xcode的代码覆盖范围中排除视图

如何从Xcode中的iOS项目的代码覆盖率统计信息中排除视图(表格单元格,自定义按钮等)?它们没有任何有用的功能,只有IBOutlet和某些动画,而且我不希望它们包含在结果中。

xcode unit-testing code-coverage ios

5
推荐指数
0
解决办法
657
查看次数

在Xcode中运行单元测试时"与测试管理器服务失去连接"

几乎每次我在Xcode的iOS模拟器中运行单元测试时,随机测试都会因"与测试管理器服务失去连接"而失败.这是什么意思?有可能解决它吗?

xcode unit-testing ios

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

_Nullable 和 _Nonnull 对 Swift 互操作以外的任何东西都有用吗?

如果 Objective-C 编译器认为您可能要传递nil给标有 的参数,它实际上会警告您_Nonnull吗?

或者它只是暗示任何工具在 Swift 和 Objective-C 之间转换以更好地处理 Swift 选项?

objective-c swift objective-c-nullability

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

Swift 3:错误:对成员'>'的模糊引用

我无法理解Swift编译器中的这个错误:

error: ambiguous reference to member '>'
        let moveDirection = dx > 0 ? .right : .left
Run Code Online (Sandbox Code Playgroud)

这是代码:

enum MoveDirection {
    case none
    case left
    case right
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    guard let touch = touches.first else {
        return;
    }

    let location = touch.location(in: humanPlayerScreen)
    let previousLocation = touch.previousLocation(in: humanPlayerScreen)

    let dx = location.x - previousLocation.x
    let dy = location.y - previousLocation.y
    let moveDirection = dx > 0 ? .right : .left // error …
Run Code Online (Sandbox Code Playgroud)

swift swift3

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

当你在模拟器上按下 Tab 键时,iOS 如何决定接下来要关注哪个文本字段?

我在注册表中有一堆文本字段,它们在 XIB 文件中的两个垂直堆栈视图中组织。我注意到在模拟器中运行应用程序时,我可以按 Tab 键,iOS 会自动移到下一个文本字段。

但这有时不起作用,我想知道为什么。有时系统会聚焦来自另一个堆栈视图的文本字段,而不是它下面的字段。

我已经设置了一系列 Next 文本字段(当在软件键盘上按 Next 时),如下所示:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    NSUInteger index = [self.textFields indexOfObject:textField];
    if (index != NSNotFound) {
        if (index == self.textFields.count - 1) {
            [textField resignFirstResponder];
            [self createAccount];
        } else {
            UITextField *nextTextField = self.textFields[index + 1];
            [nextTextField becomeFirstResponder];
        }
        return NO;
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

textFields 是此屏幕从上到下的所有文本字段的数组。

我只想通过键入几个字符并按 Tab 键来快速填写表单,而无需额外点击鼠标。是否可以?

似乎-textFieldShouldReturn在此“选项卡切换”期间未调用,因此我无法控制哪个文本字段成为下一个第一响应者。让他们以正确的顺序集中注意力的技巧是什么?

objective-c ios

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

UITableViewRowAction在iOS 11中太宽

我使用以下技巧,以便在表视图行动作中包含图像:

如何在iOS8.0中管理UITableViewRowAction的相等宽度?(更多,删除等动作)

UITableViewRowAction *completeAction = [UITableViewRowAction
                                        rowActionWithStyle:UITableViewRowActionStyleNormal
                                        title:@"   "
                                        handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
                                            ...
                                        }];
completeAction.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"MyImageHere"]];
Run Code Online (Sandbox Code Playgroud)

但它不再适用于iOS 11 - 行动作按钮的宽度对于我的图像来说太大了所以它会重复:

截图

有没有解决这个问题?

更新:

我最终使用了iOS 11中引入的新的尾随/前导上下文操作API:

https://developer.apple.com/documentation/uikit/uicontextualaction

此API允许您在操作中包含图像等.

#if defined __IPHONE_11_0 && __has_builtin(__builtin_available)

// This will be called on iOS 11+ if compiling with Xcode 9.

- (id)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (@available(iOS 11.0, *)) {
        UISwipeActionsConfiguration *configuration = ...
        return configuration;
    }
    return nil;
}

#endif

// This will be called on iOS 10 and …
Run Code Online (Sandbox Code Playgroud)

uitableview ios ios11

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