小编Jus*_*itz的帖子

NSJSONSerialization生成NSCFString*和NSTaggedPointerString*

在以下json上执行NSJSONSerialization有时会给我NSCFString*,有时在字符串值上给我NSTaggedPointerString*.有谁知道为什么会这样,NSJSONSerialization用什么来确定它返回哪种类型?

jsonData = [NSJSONSerialization JSONObjectWithData:data
                                                   options:kNilOptions
                                                     error:&parseError];

    {
      "UserPermissionsService": {
        "ServiceHeader": {}, 
        "UserApplicationPermissions": {
          "ApplicationPermissions": {
            "ApplicationID": "TEST", 
            "Permission": [
              {
                "Locations": [
                  "00000"
                ], 
                "PermissionID": "LOGIN"
              }, 
              {
                "Locations": [
                  "00000"
                ], 
                "PermissionID": "SALES_REPORT_VIEW"
              }
            ]
          }
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

"LOGIN"以NSTaggedPointerString*的形式返回."SALES_REPORT_VIEW"返回的是一个NSCFString*.这对我正在使用和投射值的下游产生影响.

UPDATE

这是我学到的......

"当整个值可以保存在指针本身而不分配任何数据时,会产生NSTaggedPointerString."

这里有一个详细的解释......

https://www.mikeash.com/pyblog/friday-qa-2015-07-31-tagged-pointer-strings.html

由于NSTaggedPointerString是NSString的子类,因此显示引号/不显示引号对我来说永远不会成为问题,因为使用了数据.

感谢所有评论的人.我很自在地理解NSJSONSerialization在做什么.

json objective-c nsstring foundation nsjsonserialization

18
推荐指数
1
解决办法
3373
查看次数

secTaskDiagnoseEntitlements MISSING keychain entitlements:找不到存储的taskRef

在两个具有WatchKit应用程序扩展的应用程序中,我error在启动时在设备日志中收到以下十次以上的内容.

secTaskDiagnoseEntitlements MISSING keychain entitlements: no stored taskRef found
Run Code Online (Sandbox Code Playgroud)

人们Apple Developer forums也报道了这一点.线程在这里......

https://forums.developer.apple.com/thread/20193

但是,没有人找到任何解决方案.

有人有主意吗?

该应用程序确实启动并运行良好,但我担心这些消息/错误可能会减慢启动和/或表明我没有正确配置项目.

xcode ios swift watchos-2

17
推荐指数
0
解决办法
3309
查看次数

是否可以在外部显示器上复制标准iOS状态栏?

我有一个iOS应用程序,它在外部显示器上显示大部分数据(通过Airplay或物理电缆连接).是否可以在外接显示器上显示设备的状态栏?这是我正在初始化外部显示器的方式:

func checkForExistingScreenAndInitializeIfPresent() -> UIViewController? {
    if UIScreen.screens.count > 1 {
        if let secondScreen = UIScreen.screens.last {
            return initializeSecondScreen(with: secondScreen)
        }
    }
    return nil
}

func initializeSecondScreen(with secondScreen: UIScreen) -> UIViewController? {
    let screenBounds = secondScreen.bounds
    secondWindow = UIWindow(frame: screenBounds)
    secondWindow?.screen = secondScreen
    secondWindow?.isHidden = false
    secondWindow?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "homeViewController")
    return secondWindow?.rootViewController
}
Run Code Online (Sandbox Code Playgroud)

我在HomeViewController中有以下代码.

override var prefersStatusBarHidden: Bool {
    return false
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default
}
Run Code Online (Sandbox Code Playgroud)

状态栏在HomeViewController的iOS应用程序中显示正常,但在HomeViewController显示在外部显示器上时从不显示.

ios swift

9
推荐指数
0
解决办法
350
查看次数

如何以编程方式创建URLAuthenticationChallenge时,如何获取非零serverTrust值?

我的Swift iOS应用程序中有公钥密码,效果很好.

我现在正致力于构建单元测试,测试公钥密码,而无需网络连接/真实直播服务器.我有这个几乎工作,但我无法弄清楚如何以编程方式创建一个具有非零服务器信任的URLAuthenticationChallenge?所有Apple文档都声明,如果您的身份验证方法是NSURLAuthenticationMethodServerTrust,那么这应该是非零的.我正在使用从本地计算机生成的p12和cer文件来构建下面示例中的URLCredential.无论我做什么,challenge.protectionSpace.serverTrust总是回来零.

let protectionSpace = URLProtectionSpace(host: "mockSession",
                                                 port: 0,
                                                 protocol: "https",
                                                 realm: nil,
                      authenticationMethod: NSURLAuthenticationMethodServerTrust)

var urlCredential:URLCredential?
if let p12Data = try? Data(contentsOf: URL(fileURLWithPath: Bundle.init(for: type(of: self)).path(forResource: "cm7justindomnit", ofType: "p12") ?? "")),
    let cerData = try? Data(contentsOf: URL(fileURLWithPath: Bundle.init(for: type(of: self)).path(forResource: "cm7justindomnit", ofType: "cer") ?? "")){
    let options: NSDictionary = [kSecImportExportPassphrase:"password"]
    var items: CFArray?
    let _ = SecPKCS12Import(p12Data as CFData, options, &items)
    if let items = items {
        let objectsData = Data.init(from: CFArrayGetValueAtIndex(items, 0))
        let objects = objectsData.toArray(type: CFDictionary.self).first …
Run Code Online (Sandbox Code Playgroud)

iphone ios swift

9
推荐指数
1
解决办法
397
查看次数

Firebase Analytics连续跟踪UINavigationController

我正在从Google Analytics(分析)过渡到Firebase Analytics。与Google Analytics(分析)不同,Firebase会自动跟踪屏幕视图,这很棒!但是,它没有跟踪屏幕,而是连续尝试跟踪UINavigationController。每次导航到其他视图控制器时,都会两次收到以下错误日志。

[Firebase / Analytics] [I-ACS031006]视图控制器已被跟踪。类,ID:UINavigationController,-1770652405567491888

拥有导航控制器时是否需要一些配置?在这种情况下如何获得自动屏幕跟踪?

更新:我还没有找到解决方案,但是至少我找到了问题的原因。如果您的初始视图控制器是“标签栏控制器”,则Firebase似乎无法理解您的视图控制器层次结构。我主要故事板上的初始视图控制器是Tab Bar Controller。如果将其删除,我的应用程序将获得良好的屏幕跟踪报告。

更新: 看来我已经找到了解决方案,但是我仍然想知道是否有人有更好的主意。由于Firebase将我的“标签栏”控制器下的所有视图控制器视为相同的UINavigationController,因此我可以在viewDidAppear中为所有它们手动调用setScreenName。

Analytics.setScreenName(screenName, screenClass: screenClass)
Run Code Online (Sandbox Code Playgroud)

可以,因为它并不比Google Analyics差,但也不是很理想,因为系统仍然尝试为每个视图控制器两次跟踪UINavigationController,而且我也没有从自动屏幕跟踪中受益。我曾尝试尝试从Firebase中删除选项卡栏控制器,就像某些人似乎所做的那样,但是看起来这些方法已从当前(v4.0.0)版本的Firebase SDK中删除。

iphone ios firebase swift firebase-analytics

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

WKRefreshBackgroundTask尝试访问文件时出错bktasksnapshot_(null)

在watchOS 4.0(Xcode 9.0 beta 6)中执行后台任务时,我收到类似于下面的错误消息.它们似乎没有引起任何问题,但我不确定.有没有人知道是什么导致这些错误被记录,如果有修复或方法来抑制它们?

2017年8月24日09:03:40.130009-0400 cfanow关注应用信息[6906:377766] [bg_app_refresh] - [WKRefreshBackgroundTask cleanupStorage] _block_invoke:213:错误试图到达文件:///用户/ justindomnitz /库/开发/ CoreSimulator /设备/ 264AA014-FD6C-426A-88DF-64E502393BAF /数据/容器/数据/ PluginKitPlugin/107681EE-B30E-49CD-9416-8F030D1CA0BF /库/ com.apple.watchkit/bktasksnapshot_(空):错误域= NSCocoaErrorDomain代码= 260"无法打开文件"bktasksnapshot_(null)",因为没有这样的文件." 的UserInfo = {NSURL =文件:///用户/ justindomnitz /库/开发商/ CoreSimulator /设备/ 264AA014-FD6C-426A-88DF-64E502393BAF /数据/容器/数据/ PluginKitPlugin/107681EE-B30E-49CD-9416-8F030D1CA0BF /库/ com.apple.watchkit/bktasksnapshot_(空),NSFilePath = /用户/ justindomnitz /库/开发商/ CoreSimulator /设备/ 264AA014-FD6C-426A-88DF-64E502393BAF /数据/容器/数据/ PluginKitPlugin/107681EE-B30E- 49CD-9416-8F030D1CA0BF /库/ com.apple.watchkit/bktasksnapshot_(空),NSUnderlyingError = 0x79f3f3c0 {错误域= NSPOSIXErrorDomain代码= 2 "没有这样的文件或目录"}}

swift watchkit watchos-4

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

NSManagedObjectContext中的EXC_BAD_ACCESS

我继承了一些swift代码,它在从核心数据中获取后立即执行refreshObject.被提取的对象与另一个表有关系.fetch和refreshObject位于performBlockAndWait中.代码如下.崩溃似乎始于iOS9.

  • 知道为什么refreshObject会抛出EXC_BAD_ACCESS吗?修复是什么?
  • 获取后立即执行refreshObject的目的是什么?该表只包含几行.这有必要吗?将所有这些一起移除的任何缺点?

    context.performBlockAndWait {
        let className = self.className()
        let fetchRequest = NSFetchRequest(entityName: className)
        groups = (try? context.executeFetchRequest(fetchRequest)) as? [FavoriteLocationGroup]
        if groups != nil {
            groups!.sortInPlace { $0.name < $1.name }
            for group in groups! {
                context.refreshObject(group, mergeChanges: false) <<< crashes here
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

提前感谢您提供的任何帮助!

背景的价值

什么是团体

core-data ios swift

4
推荐指数
1
解决办法
604
查看次数