iOS核心数据与iCloud调试指南

内容分享1天前发布
0 0 0

1、将 CDHelper.swift 文件中 localStore 变量的持久存储类型从 NSSQLiteStoreType 更改为 NSXMLStoreType,然后尝试运行应用程序。由于这种存储类型在 iOS 上不可用,你将无法运行该应用程序,因此在测试完成后请恢复此更改。

该步骤指导你修改持久存储类型进行测试,因
NSXMLStoreType
在 iOS 不可用,测试后要恢复更改。

2、在 SQLite 数据库浏览器中打开 LocalStore.sqlite,然后点击“数据库结构”按钮,会看到 ZITEM_ZNAME_INDEX,请问 ZITEM_ZNAME_INDEX 是如何产生的,它存储着什么?


ZITEM_ZNAME_INDEX
是勾选名称属性的“索引”复选框后产生的,它存储着名称属性的索引。

3、将当前模型版本设置为模型3并运行应用程序,会出现什么情况,为什么?实际上要正确映射属性需要什么?

将当前模型版本设置为模型3并运行应用程序:

由于自动推断映射模型选项已重新启用,数据降级会自动推断,所以不会抛出错误。 但实际上需要一个
Model4toModel3
映射模型来正确映射属性。

4、在检查 LocalStore.sqlite 中 ZAMOUNT 表的内容时发现数据丢失,原因是什么?

由于没有映射模型,在降级过程中所有 ZUNIT 数据都丢失了。

5、将当前模型设置为模型4,然后运行应用程序以触发自动轻量级迁移。由于存储中没有数据,这应该会很快完成。

将当前模型设置为 模型4 ,然后运行应用程序以触发自动轻量级迁移。由于存储中没有数据,这应该会很快完成。

6、浏览LocalStore.sqlite中的ZLOCATION表的内容,查看位置实体如何转换为数据库表。判断Location子实体的storedIn和aisle属性是否在同一个表中。

该内容主要是一个操作说明,指导用户查看数据库表内容并判断特定属性是否在同一表中。

7、将Unit实体的items关系的删除规则从Deny改为Cascade。插入一个单元,然后删除它。保存上下文后,相关的项目会发生什么?

如果将
Unit
实体的
items
关系的删除规则设置为 Cascade ,当删除一个单元时,所有与之相关的项目也会被删除。

8、将PrepareTVC.swift的init函数中的self.sectionNameKeyPath变量改为name。同时移除locationAtHome.storedIn作为第一个排序描述符。运行应用程序,你应该会看到项目按名称分组到各个部分。

按照要求对
PrepareTVC.swift
文件中的
init
函数进行修改 将
self.sectionNameKeyPath
变量改为
name
移除
locationAtHome.storedIn
作为第一个排序描述符 运行应用程序,即可看到项目按名称分组到各个部分

9、在PrepareTVC.swift的init函数中,将self.sort变量设置为降序排序,即将ascending设置为false。运行应用程序,你应该会看到项目以相反的顺序排序。


PrepareTVC.swift

init
函数里,将
self.sort
变量的
ascending
属性设为
false
,然后运行应用程序,即可看到项目按降序排列。

10、在PrepareTVC.swift文件中,将init函数里的self.entity变量修改为Unit。运行应用程序后,控制台日志会出现错误。这表明每次更改self.entity变量时,都需要更新configureCell函数。请更新configureCell函数,使其显示单位而非项目,以避免出现错误。若不清楚具体操作,可将PrepareTVC.swift的configureCell函数替换为一段已知正确的代码,再次运行应用程序,确保控制台日志不再产生错误。

按照以下步骤操作:

打开
PrepareTVC.swift
文件。 找到
init
函数中的
self.entity
变量,将其修改为
Unit
。 运行应用,此时会出现错误。

为避免错误,请执行以下操作:

更新
configureCell
函数以适配新的类型。 如果不确定如何修改,可以使用已知正确的代码替换
PrepareTVC.swift
中的
configureCell
函数。


// 示例:替换 configureCell 函数
func configureCell() {
    // 正确的实现代码
}

完成上述修改后,再次运行应用即可消除错误。

11、在‘杂货清单’应用的‘准备’标签页中选择一些物品并使其变为红色,然后切换到‘购物’标签页查看这些物品所在部分。该应用的关键功能是只需点击一个物品,它就会根据其位置在‘购物’标签页中自动分类。请简述该应用的操作步骤和功能特点。

操作步骤

在‘准备’标签页选择物品使其变为红色 切换到‘购物’标签页查看物品所在部分

功能特点

点击物品,物品会根据其位置在‘购物’标签页中自动分类

12、在准备(Prepare)标签页和购物(Shop)标签页测试清除(Clear)功能。

功能描述

在准备标签页:
– 选择一些项目,使其变为红色。
– 点击清除按钮:
– 若未选择项目,会收到提示,通知先选择项目。
– 若有选择项目,会弹出确认或取消操作。
– 确认后,红色项目变为灰色。

在购物标签页:
– 确保准备标签页中有红色项目。
– 切换到购物标签页,会看到项目按通道排序。
– 点击项目:
– 会被划掉、变绿并打勾。
– 点击清除按钮,可移除已勾选项目。
– 返回准备标签页:
– 已购买(已收集和清除)的项目不再是红色。

13、通过在 UnitPickerTF.swift 文件中 self.performFetch() 这一行的前一行添加 self.sectionNameKeyPath = “name” 来创建一个多组件选择器。请描述具体操作步骤。


UnitPickerTF.swift
文件中找到
self.performFetch()
这一行,在其前一行添加:


self.sectionNameKeyPath = "name"

以创建多组件选择器。

14、运行应用程序并选择单位选择器文本字段以查看结果。这里请说明运行该操作可能出现的结果有哪些类型。

此问题未给出足够信息来明确运行该操作可能出现的结果类型,原答案无实质内容,故输出 DELETE

15、通过注释掉CDHelper.swift文件中setupCoreData函数里的self.setDefaultDataStoreAsInitialStore()来重新启用XML导入。


CDHelper.swift
文件的
setupCoreData
函数中,找到
self.setDefaultDataStoreAsInitialStore()
这行代码,在其前面添加双斜杠(
//
)进行注释,即可重新启用XML导入。

16、请简述验证 SQLite 数据库中某个项目名称更改在 iOS 模拟器中是否显示的操作步骤。

首先,通过启用 DELETE 日志模式暂时禁用 WAL 日志模式,然后重新运行应用程序。 接着停止应用程序,使用 SQLite 数据库浏览器 编辑持久存储中某个项目的名称,在浏览数据模式下双击该项目,然后点击保存按钮完成编辑。 最后再次运行应用程序,查看更改是否显示在 iOS 模拟器中。

注意:不要同时在浏览器和模拟器中打开 SQLite 文件。

17、如果你有一台iOS设备,如何测试导入过程和缩略图创建不会对用户界面产生影响?

可以通过在导入过程中上下滚动来测试。

18、使用CDFaulter测试XML导入,步骤如下:在AppDelegate.swift的applicationDidBecomeActive函数中注释掉demo()。取消注释CDHelper.swift的setupCoreData函数中checkIfDefaultDataNeedsImporting代码。更新CDImporter.swift的checkIfDefaultDataNeedsImporting函数为从XML导入数据,而非深度复制。从设备或模拟器中删除应用程序,然后从Xcode再次运行以使用CDFaulter测试XML导入过程。尝试在CDHelper.swift的save函数中添加一些日志记录,重复上一步以在保存成功时获得更清晰的信息。测试完成后恢复此更改。

按照以下步骤使用CDFaulter测试XML导入:


AppDelegate.swift
文件的
applicationDidBecomeActive
函数里,将
demo()
注释掉。 取消
CDHelper.swift
文件的
setupCoreData
函数中
checkIfDefaultDataNeedsImporting
代码的注释。 更新
CDImporter.swift
文件的
checkIfDefaultDataNeedsImporting
函数为从XML导入数据,而非进行深度复制。 从设备或模拟器中删除应用程序,再从Xcode重新运行应用,以此测试XML导入过程。 可尝试在
CDHelper.swift
文件的
save
函数中添加日志记录,再次重复上述测试步骤,以便在保存成功时能更清楚地了解情况。测试结束后,恢复对
save
函数所做的更改。

19、修改 CDTableViewController.swift 的 updateSearchResultsForSearchController 函数中使用的搜索谓词,使用以下选项。在比较不同谓词的搜索结果时,搜索字母 “j”:NSPredicate(format: “name beginswith[cd] %@ OR name endswith[cd] %@”, searchBarText, searchBarText)、NSPredicate(format: “name like[cd] %@”, “ (searchBarText) ”)、NSPredicate(format: “name contains %@”, searchBarText)。

需要在
CDTableViewController.swift

updateSearchResultsForSearchController
函数中按要求修改搜索谓词,然后搜索字母 “j” 并比较不同谓词的搜索结果。具体操作是将原有的搜索谓词替换为题目中给出的三个不同谓词,依次进行搜索测试。

20、更新ShopTVC.swift,使用与为PrepareTVC添加搜索功能相同的方法来实现搜索功能。

重写
ShopTVC.swift
中的
updateSearchResultsForSearchController
函数,并修改搜索谓词,以便仅搜索列出的项目。 若
ShopTVC

CDTableViewController
的子类,在其
viewDidLoad
函数中添加
self.configureSearch()
。 若要基于除名称之外的属性进行搜索,还需要重写
updateSearchResultsForSearchController
函数。

21、创建一个基于 Swift 语言的新的 iOS > 应用程序 > 单视图应用程序,命名为 EZiCloud。确保未勾选“使用 Core Data”,并且设备设置为 iPhone。请简述具体操作步骤。

以下是创建该应用程序的具体操作步骤:

打开 Xcode 开发工具。 在欢迎窗口中,选择“Create a new Xcode project”;若已关闭欢迎窗口,可通过“File” → “New” → “Project”来新建项目。 在模板选择界面,选择“iOS”类别下的“App”模板,然后点击“Next”。 在“Choose options for your new project”界面:
– 在“Product Name”处输入“EZiCloud”。
– 确保“Interface”选择“SwiftUI”或“Storyboard”(根据你的需求)。
– 确保“Language”选择“Swift”。
– 取消勾选“Use Core Data”选项。
– 在“Devices”处选择“iPhone”。 点击“Next”。 选择项目的保存位置,然后点击“Create”。

至此,就成功创建了一个基于 Swift 语言的单视图应用程序,命名为 EZiCloud,未勾选“使用 Core Data”,且设备设置为 iPhone。

22、在应用程序目标的“常规”选项卡中链接到 Core Data 框架。

选择应用程序对应的目标。 点击“常规”选项卡的“已链接的框架和库”部分中的“+”,然后链接到
CoreData.framework

23、从以下 URL 下载并解压通用 Core Data 类文件夹:http://timroadley.com/LCDwS/Generic%20Core%20Data%20Classes.zip。

你可以通过以下步骤完成操作:

打开浏览器,在地址栏输入 http://timroadley.com/LCDwS/Generic%20Core%20Data%20Classes.zip 并回车; 等待下载完成; 找到下载的压缩文件,使用解压软件(如 WinRAR、360 压缩等)进行解压操作。

24、Drag the Generic Core Data Classes folder into the EZiCloud group in the EZiCloud project. Ensure that Copy items if needed, Create groups, and the EZiCloud target are selected before clicking Finish.

将“通用核心数据类”文件夹拖到 EZiCloud 项目的 EZiCloud 组中。 在点击“完成”之前,确保选中以下选项: 需要时复制项目 创建组 EZiCloud 目标

25、如何添加数据模型?

按以下步骤添加数据模型:

点击“文件” > “新建” > “文件…” 创建一个 iOS > 核心数据 > 数据模型 确保选择了 EZiCloud 目标和合适的组 点击“创建” 接受“Model”作为文件名

26、按照以下步骤配置 Model.xcdatamodeld:添加一个名为 Test 的实体,该实体包含三个属性:modified、device 和 someValue。将 modified 属性的类型设置为 Date。将 device 和 someValue 属性的类型设置为 String。

按照以下步骤操作:

点击 File > New > File… 创建一个 iOS > Core Data > Data Model 确保选择了合适的目标和组,然后点击 Create 以接受 Model 作为文件名 接着添加名为
Test
的实体 添加以下三个属性:

modified
(类型设为 Date

device
(类型设为 String

someValue
(类型设为 String

27、为Test实体创建一个NSManagedObject子类。在点击“创建”之前,确保选择了EZiCloud组和目标。

为Test实体创建NSManagedObject子类,创建前需确保已选择EZiCloud组和目标。

28、请描述如何在软件操作中进行新建文件的操作步骤

点击“文件”>“新建”>“文件”……

29、按照以下步骤将默认视图替换为表格视图:选择Main.storyboard。删除现有的视图控制器。将一个表格视图控制器拖到故事板上,然后点击“编辑器”>“嵌入到”>“导航控制器”。使用属性检查器(Option + 4)将导航控制器设置为初始视图控制器。将一个条形按钮项拖到表格视图控制器的右上角。使用属性检查器(Option + 4)将新条形按钮项的系统项设置为“添加”。选择原型单元格,然后将其样式设置为“副标题”,标识符设置为“Cell”。选择表格视图控制器,使用身份检查器(Option + 3)将其自定义类设置为TestTVC。按住Control键,从“添加”按钮向表格视图控制器顶部的黄色圆圈拖动一条线,然后选择“发送操作”>“add:”。

按照以下步骤将默认视图替换为表格视图:

选择
Main.storyboard
; 删除现有的视图控制器; 将一个表格视图控制器拖到故事板上,然后点击 “编辑器” > “嵌入到” > “导航控制器” ; 使用属性检查器(
Option + 4
)将导航控制器设置为初始视图控制器; 将一个条形按钮项拖到表格视图控制器的右上角; 使用属性检查器(
Option + 4
)将新条形按钮项的系统项设置为 “添加” ; 选择原型单元格,然后将其样式设置为 “副标题” ,标识符设置为 “Cell” ; 选择表格视图控制器,使用身份检查器(
Option + 3
)将其自定义类设置为
TestTVC
; 按住
Control
键,从“添加”按钮向表格视图控制器顶部的黄色圆圈拖动一条线,然后选择 “发送操作” > “add:”

30、将 CDHelper.saveSharedContext() 添加到 AppDelegate.swift 文件的 applicationDidEnterBackground 和 applicationWillTerminate 函数的底部。


CDHelper.saveSharedContext()
添加到
AppDelegate.swift
文件的
applicationDidEnterBackground

applicationWillTerminate
函数的底部。

31、在CDHelper.swift文件的setupCoreData函数中注释掉 _ = self.localStore。

将代码修改为 / _ = self.localStore / 即可注释掉该语句。

32、Run the application on two devices and tap the + button to create test objects on each device. Once Using local storage: 0 appears in the console log, you should see data on the other devices. If the simulator seems slow to sync, click Debug > Trigger iCloud Sync. What should you do to solve the problem of slow synchronization of the simulator?

Click “调试”>“触发iCloud同步”。

33、修改“Test”获取请求模板,并尝试其他过滤选项。

若要实现此需求,可按以下通用步骤进行:

选择
Model.xcdatamodeld
; 点击 Editor > Add Fetch Request ; 对已有的“Test”获取请求模板进行修改,通过一系列下拉框和特定于应用程序模型的字段来配置不同的过滤条件,例如调整谓词以设置不同的过滤规则; 若需要进行更复杂的过滤,可能需要使用谓词编程来实现自定义的
AND/OR
组合等功能; 修改完成后,运行应用程序以查看不同过滤选项的效果。

34、插入一个新的Item、LocationAtHome和LocationAtShop对象。

一般来说,插入新对象可参考如下代码示例插入新的
LocationAtHome

LocationAtShop
对象,插入
Item
对象也类似:

对于
LocationAtHome
,使用

objc NSEntityDescription.insertNewObjectForEntityForName("LocationAtHome", inManagedObjectContext:context)

来创建;

对于
LocationAtShop
,使用

objc NSEntityDescription.insertNewObjectForEntityForName("LocationAtShop", inManagedObjectContext:context)

来创建;

对于
Item
对象,使用

objc NSEntityDescription.insertNewObjectForEntityForName("Item", inManagedObjectContext:context)

来创建。

35、将 item.locationAtHome 设置为 LocationAtHome 对象,并将 item.locationAtShop 设置为 LocationAtShop 对象。

先创建
LocationAtHome

LocationAtShop
对象,然后将它们分别赋值给
item

locationAtHome

locationAtShop
属性。示例代码如下(以 Python 为例):


class LocationAtHome:
    pass

class LocationAtShop:
    pass

class Item:
    def __init__(self):
        self.locationAtHome = None
        self.locationAtShop = None

item = Item()
location_at_home = LocationAtHome()
location_at_shop = LocationAtShop()

item.locationAtHome = location_at_home
item.locationAtShop = location_at_shop

36、在 DefaultData.xml 文件的部分项目中添加一个带有随机数的数量属性。

可使用文本编辑器打开
DefaultData.xml
文件,在部分项目里添加一个名为
quantity
的属性,并为其赋予随机数。

37、从设备中删除“Groceries”应用,然后在另一次导入过程中迅速按下主屏幕按钮(Shift + H)。应用处于后台时,导入过程是否会继续进行?

若应用对后台导入有相应处理,导入可能会继续;若未处理,可能会中断。

38、在PrepareTVC.swift的init函数中注释掉self.fetchBatchSize = 25。检查查询执行时间,并使用Instruments工具调查性能。


PrepareTVC.swift

init
函数里找到
self.fetchBatchSize = 25
这行代码,在行首添加注释符号(Swift中是双斜杠
//
)将其注释。

运行应用程序,通过相关日志或调试工具检查查询执行时间。

打开Instruments工具,选择合适的模板(如Time Profiler)对应用性能进行调查分析。

39、在ShopTVC.swift中重写updateSearchResultsForSearchController函数,并修改搜索谓词,以便只搜索列出的项目。


ShopTVC.swift
文件中找到
updateSearchResultsForSearchController
函数进行重写。

修改搜索谓词时,依据列出项目的特征来构建谓词。例如:

若列出项目有特定属性,可基于该属性构建谓词。 如使用
name
属性构建谓词:


NSPredicate(format: "name contains[cd] %@", searchBarText)

可根据实际列出项目的属性进行调整。

40、请描述测试iCloud调试日志记录的步骤。

测试iCloud调试日志记录的步骤:

点击菜单栏中的 “Product” > “Scheme” > “Edit Scheme…” 。 确保选中左侧的 “Run Debug” 配置,并切换到顶部的 “Arguments” 选项卡。 在 “Arguments Passed On Launch” 部分,点击 “+” 按钮。 输入以下参数:

-com.apple.coredata.ubiquity.logLevel 3
点击 “Close” 保存更改。 再次运行应用程序,并检查控制台日志以查看iCloud调试信息。

41、开启iCloud功能并勾选“iCloud文档”。

按照以下步骤更新“Groceries”以启用iCloud功能:

选择“Groceries”目标的“功能”选项卡并展开“iCloud”。 确保已连接到互联网,然后开启“iCloud”并勾选“iCloud文档”。此时会自动生成一个“Groceries.entitlements”文件。

© 版权声明

相关文章

暂无评论

none
暂无评论...