小编and*_*der的帖子

我怎么知道UNUserNotificationCenter的removeAllPendingNotificationRequests()何时完成?

iOS文档说UNUserNotificationCenter'removeAllPendingNotificationRequests()是异步的.

我想要做的是:

  1. 打电话removeAllPendingNotificationRequests()去除我所有预定的通知

  2. 安排一堆新通知,其中一些可能会或可能不会具有与之前相同的ID

但是由于文档说该方法是在另一个线程上异步运行(并且没有完成回调参数),我担心有时候,根据线程的变化和时间等因素,第1步仍将是我正在创建第2步中的内容,因此它也会杀死我正在制作的一些新通知.

这种东西手动测试有点棘手,因为它取决于时间.所以我很好奇有人知道这是否是我应该担心的事情......

cocoa-touch ios unusernotificationcenter

15
推荐指数
1
解决办法
328
查看次数

Swift 5 LLDB错误:警告:<EXPR>:12:9:警告:从未使用变量'$ __ lldb_error_result'的初始化

完整的错误消息:

error: warning: <EXPR>:12:9: warning: initialization of variable '$__lldb_error_result' was never used; consider replacing with assignment to '_' or removing it
    var $__lldb_error_result = __lldb_tmp_error
    ~~~~^~~~~~~~~~~~~~~~~~~~
    _

error: <EXPR>:19:5: error: use of unresolved identifier '$__lldb_injected_self'
    $__lldb_injected_self.$__lldb_wrapped_expr_7(
    ^~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

当我查询Dictionary<String, String>通用UITableViewController(TVC)中的属性值时,在控制台中会出现此错误。

更多详情...

我有一个通用的TVC(如上所述),它或多或少地基于Florian Kugler和Daniel Eggert在“核心数据”一书中概述的框架,并且除其他外还采用了T的通用值。

class TVCDataSource_List<T: Managed, etc...>
Run Code Online (Sandbox Code Playgroud)

该通用TVC包括一个词典,该词典旨在容纳TVC的部分标题的较长“替代”名称的列表。

var dictionarySectionData: [String: String] = [:]
Run Code Online (Sandbox Code Playgroud)

我选择以这种方式对TVC进行编程,因为String在数据模型属性(节标识符)中以短的两个字符保存名称的引用比以长的名称保存引用更有效String

我曾尝试在代码中的许多不同位置填充此词典,其中大多数都可以工作,但都具有相同的结果,特别是:

  • 我使用调试器逐步执行代码,并按预期方式,通过对持久性存储的单个提取请求填充字典。
  • 紧接着,调用print(dictionarySectionData.description)控制台会按预期打印出正确填充的字典;
  • 在控制台之前和之后立即使用p dictionarySectionData(或po)询问LLDB print,产生在该问题开始时详细说明的“完全错误消息”;
  • 同时,助理编辑器变量查看器显示字典为空,这与打印令人惊讶地冲突。
  • 我继续逐步完成代码以构造TVC,因为字典不再具有其键值对,我无法调出我的节头的值,并且按预期,控制台报告“致命错误:在展开Optional时意外发现nil值”。

我做了一些简单的研究:

  1. Scott …

generics dictionary uitableview lldb swift

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

在Swift 5中配置核心数据持久性

我正在使用以下教程将Core Data实现到我的Swift IOS应用程序中。如视频所示,我的持久性管理器是通过单例模式创建的。这是描述它的代码:

import Foundation
import CoreData

class DataLogger {

    private init() {}
    static let shared = DataLogger()
    lazy var context = persistentContainer.viewContext

    private var persistentContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: "mycoolcontainer")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                print("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()

    func save () {
        if self.context.hasChanges {
            self.context.perform {
                do {
                    try self.context.save()
                } catch {
                    print("Failure to save context: \(error)")
                } …
Run Code Online (Sandbox Code Playgroud)

core-data ios swift

7
推荐指数
2
解决办法
520
查看次数

具有七个选项卡的选项卡栏控制器,五个选项卡通向拆分视图控制器

我已经做了大量研究,并且阅读了很多关于将Tab Bar控制器与Split View Controllers一起使用的信息,但是似乎找不到任何解决方法的提示...

到目前为止,Apple开发者论坛中针对Cocoa Touch的帖子中的标题“在TabBarController内放置SplitViewController”到目前为止给了我最大的指导。

从iOS 8开始,支持将拆分视图控制器嵌入选项卡栏控制器(或您自己的容器视图控制器)中,并且有望“正常工作”。仍然不支持将拆分视图控制器推入导航堆栈。

这似乎违反了Apple文档,其中包括日期为2014年11月的标题为“ Combined View Controller Interfaces”的文章。

您可以使用UIKit框架本身提供的视图控制器,也可以将其与其他视图控制器结合使用,以创建更复杂的接口。但是,当组合视图控制器时,包含的顺序很重要。只有某些安排有效。从孩子到父母的收容顺序如下:

  • 内容视图控制器和具有灵活边界的容器视图控制器(例如页面视图控制器)
  • 导航视图控制器
  • 标签栏控制器
  • 分割视图控制器

我有UITabBarController七个标签。其中,五个选项卡导致UISplitViewControllers,两个选项卡导致UINavigationControllers。

这是一些情节提要的屏幕截图,显示了标签栏控制器通向五个拆分视图控制器中的三个... <code> UIStoryboard </ code>的屏幕截图

当我使用self.traitCollection.horizontalSizeClass = UIUserInterfaceSizeClassRegular- 运行设备屏幕的水平(宽度)尺寸为常规(非紧凑型)->在iPad上运行目标时,没问题。所有七个选项卡都显示在底部选项卡栏上,并且所有视图控制器(包括拆分视图控制器)都可以正常工作。

我的问题?

当我使用self.traitCollection.horizontalSizeClass = UIUserInterfaceSizeClassCompact-在设备屏幕的水平(宽度)尺寸为紧凑->在iPhone或iPhone Plus上运行的目标运行目标时,Xcode会出错并冻结应用程序操作。正如预期的那样,IB和iOS设备都具有相同的结果。

错误信息: Split View Controllers cannot be pushed to a Navigation Controller <UIMoreNavigationController: 0x7ffda38b0200>

我知道为什么我收到了错误消息。在水平尺寸类别为“紧凑”的情况下,七个选项卡在屏幕上下降到五个,其中一个(由iOS专门准备)为“更多”选项卡。其余三个选项卡都降级为“更多”选项卡,它是其自己的导航控制器和表视图控制器。我的情节提要正在尝试将拆分视图控制器推入此导航堆栈。

对合法解决方案有什么想法?

objective-c uitabbarcontroller uiviewcontroller uisplitviewcontroller ios

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

iOS 14、Swift UI 2 更改 NavigationLink 内所选列表项的背景颜色

在 a 中选择列表项时,如何更改它的背景颜色NavigationLink

它始终以蓝色突出显示(请参阅附加屏幕)。我试图更改listRowBackgroundColor视图修改器,但没有用。

NavigationView {
    
    List (templateModel.model.items) { item in
        
        NavigationLink(destination: DetailView(selectedCategory: item.name, dismiss: dismiss)
            .environmentObject(OrientationInfo())) {
             Text("Test")
                 .listRowBackground(Color.gray)
        }
        .background(Color.black)
        .buttonStyle(PlainButtonStyle())
        .listRowBackground(Color.gray)
    }    
    .background(Color.black) 
    .listStyle(InsetListStyle())
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

swift swiftui swiftui-list swiftui-navigationlink

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

更新到Xcode 6.3打破了应用程序 - Google GTLTouchStaticLib"不等于空指针总是如此"

我在我的应用中使用Google Drive SDK.

自2014年6月左右以来,它一直运作良好.

在更新到Xcode 6.3之后,我的目标都没有构建.

实现文件GTMOAuth2ViewControllerTouch.m包含编译器抱怨的两个块:

if (accessibility == NULL
    && &kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly != NULL) {
        accessibility = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly;
}
Run Code Online (Sandbox Code Playgroud)

特别是消息:" kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly不等于空指针的地址比较总是如此".

if (accessibility != NULL && &kSecAttrAccessible != NULL) {
    [keychainQuery setObject:(id)accessibility
                      forKey:(id)kSecAttrAccessible];
}
Run Code Online (Sandbox Code Playgroud)

特别是消息:" kSecAttrAccessible不等于空指针的地址比较总是如此".

编译器告诉我,比较时的两个键!= NULL始终为true.

我相信我缺乏计算机科学培训让我无法理解这里的问题 - 也许这只是一种不好的看法?

我已经看过这个问题,但无法理解与我的Google Drive SDK实施文件GTMOAuth2ViewControllerTouch.m相关的问题.

我真的很想了解潜在的问题.

请帮忙...

comparison ios google-drive-api xcode6.3

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

未找到GTMSessionFetcher.h文件将应用程序升级到最新的google-api-objectivec-client

我在iOS应用中实现了对Google云端硬盘的访问权限.这是自2014年中期以来应用程序中的一个活跃功能,并且在iOS 6,7和8下正常运行.我目前正在检查我的项目是否与iOS 9兼容.

我已下载最新版本google-api-objectivec-client以确保我的项目保持最新状态.

我重新编写了标准的Google实施工具......详见本页详细信息,并在本文末尾包含完整性.

问题:当我尝试构建我的任何版本时,我收到错误" GTMSessionFetcher.h找不到文件".

我确定我已按照以下/ Google网页上的步骤正确实施了API.

我查看了旧版本的代码,但遗憾的是我没有备份Google SDK,因此无法轻易说出已更改的内容.

它似乎源于......内GTMOAuth2Authentication.h......

#if GTM_USE_SESSION_FETCHER
  #import "GTMSessionFetcher.h"
#else
  #import "GTMHTTPFetcher.h"
#endif  // GTM_USE_SESSION_FETCHER
Run Code Online (Sandbox Code Playgroud)

我不明白如何GTM_USE_SESSION_FETCHER设置以及在这种情况下为什么会这样.

任何建议都非常感谢.


适用于iOS的Google Drive API实施

注意:步骤1和2完成没有问题.

第3步:准备项目

  1. 在Xcode中,创建一个包含示例应用程序的新项目:
    • 单击文件>新建>项目,选择单视图应用程序模板,然后单击下一步.
    • 填写产品名称,组织名称和公司标识符.确保选择Objective-C作为语言,然后单击"下一步".
    • 选择项目的目标目录,然后单击"创建".
  2. 通过GTL.xcodeprojSource上面的客户端库下载文件夹的目录拖动到XCode项目来添加客户端库.
  3. 在XCode项目导航器中,选择您创建的项目以显示项目设置.
  4. 在项目设置中选择Build Phases选项卡,然后修改Link Binary with Libraries列表以包括:
    • libGTLTouchStaticLib.a 来自GTL项目.
    • Security.frameworkSystemConfiguration.framework.
  5. 在项目设置中选择Build Settings选项卡,然后修改以下两个构建设置:
    • 添加-ObjC -all_load到链接>其他链接器标志设置.编辑这些字段的一种好方法是在字段名称上单击一次以选择它,然后单击Enter以输入设置.
    • 通过使用递归选项将客户端库的Source目录添加到"搜索路径">"用户头"搜索路径部分,将客户端库头添加到应用程序项目.您可以通过将**附加到路径或双击输入的路径并在出现的对话框中选择递归来选择递归选项.要在基于Unix的系统中查找此目录的绝对路径,请在终端窗口中导航到步骤2中下载客户端库的目录,cd进入源目录,然后键入pwd命令.
  6. 拖动GTMOAuth2ViewTouch.xib从客户端库的Source/OAuth2/Touch文件夹到应用程序的Supporting Files文件夹.
  7. 通过拖动添加驱动器,API服务GTLDrive.h,并GTLDrive_Sources.m …

xcode objective-c ios google-drive-api ios9

4
推荐指数
2
解决办法
4378
查看次数

核心数据错误 - NSDate localizedCaseInsensitiveCompare:发送到实例的无法识别的选择器

我搜索过去几个小时但尚未找到答案.我实现了一个AVFoundation摄像头,我将图像数据保存到磁盘并仅存储核心数据中的路径.一切正常,但在随机拍摄照片后,我收到此错误:

CoreData:错误:严重的应用程序错误.在Core Data更改处理期间捕获到异常.这通常是NSManagedObjectContextObjectsDidChangeNotification的观察者中的错误. - [__ NSDate localizedCaseInsensitiveCompare:]:无法识别的选择器发送到实例

这是我的获取请求代码:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Photo"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"notebook = %@", notebookItem];
[request setPredicate:predicate];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"dateTaken"
                                                              ascending:NO
                                                               selector:@selector(compare:)]];
Run Code Online (Sandbox Code Playgroud)

以下是我将数据保存在单独的类中的方法:

//I create a photo Object to save to core data and set properties like dateTaken and tittle

//Here is where I create the path name
NSDate *dateString = [[NSDate alloc] init];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS"];
NSString *path = [formatter stringFromDate:dateString];

//Now I save to disk
NSArray …
Run Code Online (Sandbox Code Playgroud)

core-data objective-c avfoundation ios unrecognized-selector

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