小编Mah*_*dam的帖子

UIActivityViewController在iOS 11上复制项目两次

我正在使用UIActivityViewController共享webview网址iOS 11和使用时Copy然后转到消息应用然后粘贴,它被粘贴两次.

出于好奇,我尝试使用Safari,Chrome,Firefox以及除消息之外的其他应用程序.结果很有趣:

  • 来自Safari的应对程序始终适用于任何应用程序
  • 从Chrome或FireFox处理应用程序在Notes应用程序中工作,但它复制了任何具有TextField(Messages,WhatsApp,Slack,Signal,...)的应用程序中的复制文本

这是我的简单代码

func shareURL(title: String, url: URL) {
    var activityItems = [AnyObject]()
    activityItems.append(TitleActivityItemProvider(title: title))

    activityItems.append(url as AnyObject)

    let activityViewController = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
    self.present(activityViewController, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

这是TitleActivityItemProvider班级

class TitleActivityItemProvider: UIActivityItemProvider {
    static let activityTypesToIgnore = [UIActivityType.copyToPasteboard]

    init(title: String) {
        super.init(placeholderItem: title)
    }

    override var item : Any {
        if let activityType = activityType {
            if TitleActivityItemProvider.activityTypesToIgnore.contains(activityType) {
                return NSNull()
            }
        }
        return placeholderItem! as …
Run Code Online (Sandbox Code Playgroud)

ios uiactivityviewcontroller swift3 ios11

7
推荐指数
1
解决办法
510
查看次数

测试包含带有Appium的WKWebView的iOS应用程序时的行为不一致

我正在为使用WKWebviews显示一些数据的iOS应用程序创建自动化测试.用户在本机文本字段中键入查询,结果显示在webview中.问题是我在检查HTML中的某些预期结构时会出现不一致的行为.

这是我期待的HTML:

<div id="results">
    <div class="frame">
        <div class="card">
            // here my data
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

Appium我检查这三个div存在的非常简单的情况如下:

it("should display results inside the web view", function () {
    return driver
    .waitForElementByName("Address and Search")
    .sendKeys("search query")
    .sleep(1000)
    .contexts().then(function (contexts) { // get list of available views. Returns array: ["NATIVE_APP","WEBVIEW_1"]
    return driver.context(contexts[1]); // choose the webview context
    })
    .waitForElementById("results", 60000)
    .waitForElementByCss(".frame", 60000)
    .waitForElementByCss(".card", 60000)
    .sleep(3000)
});
Run Code Online (Sandbox Code Playgroud)

每次运行测试时我都得到不同的结果:有时它会找到所有元素,有时它只找到第一个元素(waitForElementById),然后无法获得任何其他元素.

这是我的配置:

exports.ios93 = {
    browserName: '',
    'appium-version': '1.4.13',
    platformName: 'iOS',
    platformVersion: '9.3',
    deviceName: …
Run Code Online (Sandbox Code Playgroud)

node.js appium appium-ios

6
推荐指数
0
解决办法
236
查看次数

Swing组件什么时候可以“显示”?

是否有一种方法(例如,通过事件?)来确定Swing组件何时变得“可显示”(根据Component.getGraphics的Javadocs)?

我尝试执行此操作的原因是可以调用getGraphics(),然后将其传递给组件的“渲染策略”。

我尝试添加ComponentListener,但componentShown似乎没有被调用。还有什么我可以尝试的吗?

谢谢。

另外,可以保留Graphics我收到的物品吗?还是有可能在产品生命周期的后期创建一个新产品Component?(例如,在调整大小/隐藏之后?)

java graphics swing

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

适用于iOS的CQRS实施

我正在使用CQRS(Command and Query Responsibility Segregation)并为它寻找一个iOS实现/库,我知道哪里可以找到它?

谢谢.

cqrs ios ios5

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

如何将Facebook注册的用户与使用相同电子邮件注册的现有用户合并

我在iOS应用程序中使用解析,有两种注册方式,使用电子邮件/密码或Facebook登录.

当用户使用他的电子邮件/密码注册然后注销并尝试使用具有相同电子邮件的Facebook帐户注册时,会出现问题.

我正在使用[PFFacebookUtils logInInBackgroundWithReadPermissions:block:Facebook注册,Users在Parse 的表中创建一个新的用户对象

现在我有两个同一用户的记录,我无法使用用户电子邮件更新包含Facebook信息的记录,因为Parse不允许重复的电子邮件

那么什么应该是解决这个问题的最佳解决方案?

UPDATE

我使用@kRiZ解决方案使用普通的Facebook代码登录,然后创建新用户或使用Facebook数据链接用户

- (void)loginWithFacebookWithSuccessCallback:(APISuccessCallback)successCallback
                          andFailureCallback:(APIFailureCallback)failureCallback {
    // Login PFUser using Facebook
    NSArray *permissionsArray = @[@"public_profile", @"email"];

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
    [login logInWithReadPermissions: permissionsArray handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
         if (error) {
             failureCallback(error);
         } else {
             FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me?fields=id,first_name,last_name,email,gender" parameters:nil];

             [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id fbResult, NSError *error) {
                 if (!error) {
                     NSString *email = result[@"email"];
                     User *existingUser = [self getUserByEmail:email];

                     if (existingUser == nil) { …
Run Code Online (Sandbox Code Playgroud)

facebook ios parse-platform

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

用于应用程序后台处理的 iOS CoreBluetooth 调度队列

首先的问题是,在核心角色中使用核心蓝牙将数据发送到蓝牙 LE 设备的最佳方式是什么。需要处理数据,如果它在 UI 线程上运行,则需要足够的时间在 UI 线程上引起问题。用户将在手机应用程序打开的情况下启动该过程,然后继续使用该应用程序或关闭该应用程序并期望数据继续发送到设备。

我发现了 2 种非常糟糕的方法,它们似乎有效

  • 将蓝牙 CBCentralManager 对象放在主队列上并冒着阻塞 UI 的风险
  • 忽略来自 iOS 蓝牙堆栈的指示,表明它尚未准备好传输并有丢失数据的风险。

这似乎源于 iOS 线程/调度队列以及 iOS 蓝牙内部结构。

蓝牙 LE iOS 应用程序作为核心角色连接到蓝牙 LE 设备。CBCentralManager 是根据苹果文档初始化的。队列定义为:

用于调度中心角色事件的调度队列。如果值为 nil,则中央管理器使用主队列分派中央角色事件。

正如vladiulianbogdan 对 Swift 的回答所建议的:为蓝牙中央管理器选择队列,我们应该为 CBCentralManager 创建一个串行队列。这似乎是有道理的,有一段时间我一直在遵循这个建议。此外allprog评论斯威夫特CoreBluetooth:在一个单独的线程应该CentralManager运行 表明,主队列将暂停,但其他队列不会,这是我所看到的是相反的。

在为蓝牙使用串行队列时,最好使用与主线程不同的队列。有一个问题:回调:

    -(void)peripheralIsReadyToSendWriteWithoutResponse:(CBPeripheral *)peripheral
    {
        [self sendNextBluetoothLePacket];
    }
Run Code Online (Sandbox Code Playgroud)

停止被调用。还有另一种方法可以检查外设是否准备好发送更多数据,CBPeripheral 有一个成员变量 canSendWriteWithoutResponse,如果可以发送则返回 true。此变量也开始重新调整 false 并且永远不会回到 true。

我从Sandeep Bhandari找到了这条评论,它说当应用程序进入后台时,所有队列线程都会停止,除非它们是苹果提供的后台模式之一。Biniou 发现他能够通过在视图控制器而不是应用程序委托中初始化来解决他的核心蓝牙背景问题。这对我来说没有意义。

我的应用程序确实在其 info.plist 中选择了核心蓝牙背景模式,因此它应该是这些背景模式之一。我发现当我的应用程序进入后台时,应用程序确实会继续处理数据。我看到来自每 100 毫秒运行一次的轮询循环的日志消息。

如果我从这些轮询循环中触发蓝牙 LE 写入,我就可以继续发送数据。问题是我无法确定发送数据的安全速率,要么速度很慢,要么数据有时会丢失。

我不确定如何最好地处理这个问题。任何建议,将不胜感激。似乎无论我在后台做什么,我都无法确定发送数据是否安全。

我看到这条评论 …

grand-central-dispatch ios core-bluetooth ios-bluetooth dispatch-queue

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

将 SwiftUI 颜色转换为 UIColor

我想将 SwiftUI 视图颜色转换为 UIKit UIcolor 组件。我尝试了几种方法,也参考了 StackOverflow 已经给出的答案,但它们没有用。一些用户在这些帖子中也提到了这一点。我已经完成了以下由turingtested提出的代码

但这不起作用。任何建议或帮助都非常感谢。

fileprivate extension Color {
    func uiColor() -> UIColor {
        let components = self.components()
        return UIColor(red: components.r, green: components.g, blue: components.b, alpha: components.a)
    }
    private func components() -> (r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) {
        let scanner = Scanner(string: self.description.trimmingCharacters(in: CharacterSet.alphanumerics.inverted))
        var hexNumber: UInt64 = 0
        var r: CGFloat = 0.0, g: CGFloat = 0.0, b: CGFloat = 0.0, a: CGFloat = 0.0
        let result = scanner.scanHexInt64(&hexNumber) …
Run Code Online (Sandbox Code Playgroud)

swift swift5 swiftui

5
推荐指数
2
解决办法
3383
查看次数

在已失效的会话中创建的任务

我在 crashlytics 上遇到以下崩溃,但无法在我的设备上重现

Fatal Exception: NSGenericException
Task created in a session that has been invalidated
Run Code Online (Sandbox Code Playgroud)

在下一行

NSURLSessionTask *task = [self.session uploadTaskWithRequest:request fromFile:filePathURL];
[task resume];
[self.session finishTasksAndInvalidate];
Run Code Online (Sandbox Code Playgroud)

我在委托方法中处理了会话失效

- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error {
    // Crashlytics logging
    [CrashlyticsKit setBoolValue:true forKey:@"URLSession_didBecomeInvalid"];
    self.session = [self createNewSession];
}

- (NSURLSession *)CreateSession {
    NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:SERVER_URL];

    if (@available(iOS 11.0, *)) {
        sessionConfig.waitsForConnectivity = YES;
    }
    return [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
}
Run Code Online (Sandbox Code Playgroud)

上传新版本后,我仍然遇到相同的崩溃,并且didBecomeInvalidWithError根本没有“”处的 Crashlytics 日志!

知道如何解决这个崩溃吗?

objective-c ios nsurlsession nsurlsessiontask

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

CNCopyCurrentNetworkInfo 不适用于 iOS 14

我有一个使用 WIFI 连接到外部设备的应用程序,我曾经通过检查 WIFI SSID 来验证 iPhone 是否已连接到设备。这在 iOS 13 发布时被阻止,我通过请求获取 SSID 的位置权限来修复它。

我现在尝试使用启用了位置服务的 iOS 14 测试版,但无法获取 WIFI SSID,但是相同的代码适用于 iOS 13。

这是我打电话时得到的日志 CNCopyCurrentNetworkInfo

nehelper sent invalid result code [1] for Wi-Fi information request

nehelper sent invalid response: <dictionary: 0x1e815f3e0> { count = 1, transaction: 0, voucher = 0x0, contents =
    "XPCErrorDescription" => <string: 0x1e815f548> { length = 18, contents = "Connection invalid" }
}

nehelper sent invalid response for Wi-Fi information request: <dictionary: 0x1e815f3e0> { count = 1, transaction: 0, …
Run Code Online (Sandbox Code Playgroud)

wifi ios ios14

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

将NSString的NSArray转换为NSNumber的NSArray的更好方法

是否有更好的方法来转换NSArrayNSStringNSArrayNSNumber比下面的代码:

-(NSArray*) convertStringArrayToNumberArray:(NSArray *)strings {
    NSMutableArray *numbers = [[NSMutableArray alloc] initWithCapacity:strings.count];
    for (NSString *string in strings) {
        [numbers addObject:[NSNumber numberWithInteger:[string integerValue]]];
    }
    return numbers;
}
Run Code Online (Sandbox Code Playgroud)

objective-c nsnumber nsstring nsarray ios

3
推荐指数
1
解决办法
1419
查看次数

升级解析cocoapod后,PFFacebookUtils未解析

我刚刚更新的吊舱文件在我的项目,从提高解析版 1.2.191.5.0,现在我得到的编译错误为PFFacebookUtils类,如下

使用未声明的标识符'PFFacebookUtils'

ios cocoapods parse-platform ios7 parsefacebookutils

2
推荐指数
1
解决办法
892
查看次数

在CakePhp中导入供应商类时出错

我有:

App/Vendor/Facebook
App/Vendor/Facebook/facebook.php
Run Code Online (Sandbox Code Playgroud)

App/Controller/AppController.php我用过:

App::uses('facebook', 'Vendor/Facebook');
Run Code Online (Sandbox Code Playgroud)

然后AppController类是:

class AppController extends Controller {

    public $fb;

    public function beforeFilter() {
        $fb = new Facebook();   
    }   

}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

致命错误:第42行/home/users/example.com/www/app/Controller/AppController.php中未找到"Facebook"类

这怎么可能?怎么了?

谢谢!

php cakephp

0
推荐指数
1
解决办法
9071
查看次数