首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS,Swift:如何保存包含自定义对象的数组,以便加载以供重用?

在iOS中,可以使用归档(Archiving)来保存包含自定义对象的数组,以便加载和重用。归档是一种将对象转换为二进制数据的过程,可以将对象保存到文件中或者存储在内存中。

下面是一种保存包含自定义对象的数组的方法:

  1. 首先,确保自定义对象遵循NSCoding协议。NSCoding协议定义了两个方法:encode(with:)init(coder:),用于将对象编码为二进制数据和从二进制数据解码为对象。
代码语言:swift
复制
class CustomObject: NSObject, NSCoding {
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func encode(with coder: NSCoder) {
        coder.encode(name, forKey: "name")
    }
    
    required init?(coder: NSCoder) {
        name = coder.decodeObject(forKey: "name") as? String ?? ""
    }
}
  1. 创建一个包含自定义对象的数组。
代码语言:swift
复制
let object1 = CustomObject(name: "Object 1")
let object2 = CustomObject(name: "Object 2")
let object3 = CustomObject(name: "Object 3")

let array = [object1, object2, object3]
  1. 使用NSKeyedArchiver将数组归档为二进制数据,并将其保存到文件中。
代码语言:swift
复制
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("data.archive")

do {
    let data = try NSKeyedArchiver.archivedData(withRootObject: array, requiringSecureCoding: false)
    try data.write(to: fileURL)
} catch {
    print("Failed to save data: \(error)")
}
  1. 加载保存的数据并解档为数组。
代码语言:swift
复制
var loadedArray: [CustomObject] = []

do {
    let loadedData = try Data(contentsOf: fileURL)
    if let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(loadedData) as? [CustomObject] {
        loadedArray = array
    }
} catch {
    print("Failed to load data: \(error)")
}

现在,你可以使用loadedArray数组中的对象进行重用。

这里推荐使用腾讯云的对象存储服务 COS(Cloud Object Storage),它提供了高可靠性、低成本的对象存储解决方案,适用于存储和管理任意类型的文件和媒体数据。你可以将归档的数据上传到COS中进行长期保存和备份。

腾讯云COS产品介绍链接地址:https://cloud.tencent.com/product/cos

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何结合 Core Data 和 SwiftUI

设置核心数据需要两个步骤:创建所谓持久性容器(从容器存储中加载保存实际数据),然后将其注入 SwiftUI 环境中,以便我们所有的视图都可以访问它。 Xcode 模板已经为我们完成了这两个步骤。...这将告诉 Core Data 创建学生并保存他们所需一切,因此请回到 ContentView.swift以便我们编写一些代码。...从那里开始,我们可以像常规 Swift 数组一样开始使用学生,但是您会发现有一个陷阱。...这些对象之所以称为托管对象,是因为 Core Data 会照料它们:它从持久性容器中加载它们并将它们更改也写回。...现在,您可能认为这需要大量学习,但并不会带来很多结果,但是您现在知道什么是实体和属性,知道什么是托管对象和请求,并且已经了解了如何保存更改。

11.8K30

Swift 周报 第三十三期

使用 Swift Package 插件将自定义字体加载到您应用程序中[9] 摘要: 本文介绍了如何使用 Swift Package 插件将自定义字体加载到应用程序中。...通过创建一个 Swift Package 来包含共享字体文件和字体加载代码,可以加快新应用发布速度,减少代码重复,并提供一个统一更新字体文件地方。...结合 Swift Package 重用性和 Swift Package 插件强大功能,甚至可以在构建时从字体文件自动生成所有必要代码。本文使用 SwiftGen 来演示如何实现这一点。...通过示例,展示了如何创建短数字格式样式和粗体数字格式样式,并说明了如何自定义类型中重用这些格式样式。最后,作者还提供了一种封装格式化逻辑方法。.../66115 [8] 轻量化 iOS 动画框架实现: https://juejin.cn/post/7252586606091419708/ [9] 使用 Swift Package 插件将自定义字体加载到您应用程序中

31820

iOS 9 Storyboard 教程(一下)

这个table view应该会显示一列玩家名单,所以现在你需要为这个app创建一个数据模型—一个包含Player对象数组.使用Swift File模板在iOS/Source里为这个工程添加一个新文件....接下来,你需要把一个Player对象数组赋值给PlayersViewController.使用Swift File模板为开始,创建一个新文件,命名为SampleData.把它添加到SampleData.swift...,并且分配了一个硬编码Player对象数组给它....现在你有一个包含很多Player对象数组.你可以继续在PlayersViewController里链接数据源.用下面的方法替换table view数据源: override func numberOfSectionsInTableView...: 1.dequeueReusableCellWithIdentifier将会使用重用标识符PlayerCell,重用已经存在cell如果不存在就创建一个新. 2.你查找每一行对应Player对象

3K20

应用程序内购买教程:入门

如果这些是不熟悉主题,那么 在开始之前查看我们Swift教程范围。您还需要一个付费开发者帐户,可以访问iOS开发人员中心 和App Store Connect。...主视图控制器位于MasterViewController.swift中。此类显示表视图,其中包含可用IAP列表。购买存储为SKProduct对象数组。...start() } 此代码保存用户完成处理程序以供将来执行。然后,它通过SKProductsRequest对象创建并向Apple发起请求。...它接收一个SKProduct对象数组并将它们传递给先前保存完成处理程序。处理程序使用新数据重新加载表。如果出现问题,request(_:didFailWithError:)则调用。...如果交易已完成或已恢复,则会将其添加到购买集并将标识符保存在其中UserDefaults。它还会在该事务中发布通知,以便应用程序中任何感兴趣对象都可以监听它以执行更新用户界面等操作。

5.4K20

架构之路 (五) —— VIPER架构模式(一)

开始 首先看下主要内容: 在本教程中,您将了解如何在SwiftUI和Combine中使用VIPER体系结构模式,同时构建一个允许用户创建公路旅行iOS应用程序,来自翻译。...在Data Sources组中,有用于保存加载数据辅助函数。 如果您喜欢在WaypointModule组中查看前面的内容。它有一个Waypoint编辑屏幕VIPER实现。...它将重用TripDetailInteractor,因为它共享相同数据模型,并且是只读read-only视图。 创建一个名为TripMapViewPresenter.swiftSwift文件。...在init(interactor:)中,您将waypoints从interactor映射到MKPointAnnotation对象以便它们可以作为地图上大头针显示。...构建并运行,您现在可以自定义一次旅行!确保保存任何更改。

17.4K10

用这些 iOS 技巧让你 APP 性能更佳

不要包含徽标或其他品牌元素,除非它们是应用程序第一个页面的静态部分。」 使用启动页进行加载或品牌化可能会减慢首次使用时间,并使用户感觉应用程序运行缓慢。...如果你尝试使用任何其他自定义子类(例如 UserViewController),Xcode 将提示你禁止使用自定义类名。 ? 启动页 storyboard不能包含非 UIKit 标准类。...这两种方法让我们指定需要保存加载数据以及如何对它们进行编码或解码。...这样可确保父类有机会保存和恢复状态。 一旦指定保存对象解码完成,applicationFinishedRestoringState() 将被调用以告诉视图控制器状态已被恢复。...我建议观看 Apple WWDC 2012 视频上 UI 并发,以便更好地了解如何构建响应式应用。 01 后记 性能优化需要你在应用程序功能之上编写更多代码或配置其他设置。

3.2K30

窥探Swift之协议(Protocol)和委托代理(Delegate)回调使用

协议与委托代理回调在之前博客中也是经常提到和用到在《Objective-C中委托(代理)模式》和《iOS开发之窥探UICollectionViewController(四) --一款功能强大自定义瀑布流...说到协议,在Objective-C中也是有协议,并且Swift协议和Objc中协议使用起来也是大同小异,在Java等现代面向对象编程语言中有接口(Interface)概念,其实和Swift中或者...本篇先给出CocoaTouch中常用控件UITableView常用回调,并以此来认识一下回调使用方式。紧接着会给出如何去实现自己Delegate回调,即在自定义控件中去实现委托代理回调。...通过Cell重用标示符来创建Cell实例对象,并对Cell上一些属性赋值,并返回当前是Cell实例对象,代码如下所示。...上面的场景在iOS开发中极为常见,使用场景也是比较广泛。所以协议无论在Swift还是在iOS开发中都是极为重要概念之一。

3.4K80

唐巧iOS技术博客选摘

使用crashlytics来保存应用崩溃信息:http://blog.devtang.com/blog/2013/07/24/use-crashlytics/ 3. iOS开发工具篇,AppStore...JokeClient-Swift:JokeClient-Swift是@YANGReal用swift写了一个开源糗事百科客户端,主要涉及网络请求,图片加载、缓存、自定义UITableViewCell、...《如何Swift做一个不错按钮变换动画》:文章介绍了如何Swift语言,采用Core Graphics来完成两个按钮之间切换动画效果(效果图如下所示)。...《iOS 图片加载速度极限优化—FastImageCache 解析》:FastImageCache 是 Path 团队开发一个开源库,用于提升图片加载和渲染速度,让基于图片列表滑动起来更顺畅,本文分析了它实现方式...包含iOS、Mac 和 Apple Watch 版本,并且为这个 demo 分别用 Objective-C 和 Swift 实现了一遍,最后还包括了 30 页文档。

3.2K60

iOS安全基础之钥匙串与哈希

软件开发最重要一个方面同时也被认为是最核心部分就是应用程序如何实现更好安全性。用户都希望他们应用程序能够安全运行,以避免受潜在威胁。 我会在本文中,为你仔细讲解iOS安全基础知识。...在了解同时,我还会告诉你如何使用一些基本加密哈希方法来安全地将你输入信息存储在iOS钥匙串中,这样一来,你数据私密性和受保护程度都将大幅度提高。...你仍然需要存储用户对象以及密码,这些都会在helper类中实现。 打开AuthController.swift,这是一个静态类,它将保存与此应用程序身份验证相关逻辑。...你仍然需要存储用户对象以及密码,这些都会在helper类中实现。 打开AuthController.swift,这是一个静态类,它将保存与此应用程序身份验证相关逻辑。...在FriendsViewController.swift中,会显示用户模型对象列表。

2.8K20

ARKit

世界跟踪还提供使AR体验更具沉浸感功能,例如识别用户环境中对象和图像以及响应真实世界光照条件。 注意 您可以在用户​​真实环境中显示3D对象,而无需构建自定义AR体验。...主题 第一步 验证设备支持和用户权限 确保您应用可以使用ARKit并尊重用户隐私。 class ARSession 一个共享对象,用于管理增强现实体验所需设备摄像头和运动处理。...快速拍摄:为增强现实创造游戏 了解Apple如何为WWDC18构建精选演示,并获得使用ARKit,SceneKit和Swift制作自己多人游戏技巧。...创建持久AR体验 保存加载ARKit世界地图数据,以允许用户在相同真实环境中返回之前AR体验。 class ARWorldMap 来自世界跟踪AR会话空间映射状态和锚点集。...class ARObjectScanningConfiguration 一种配置,使用后置摄像头收集高保真空间数据,用于扫描3D对象以便以后检测。

2.2K20

春招路上孤独iOSer心路历程(面经)

一定是线程不安全swift 数组切片是什么 swift extension理解 翻转链表 讲讲对这个程序测试用例 最近公共父节点 提问 2019年 12-20 hr面 围绕简历上获奖 还有奖学金成绩方面问了些问题...2020年 1-20 1、2面 一面 1 tableview 重用机制 滑动性能调优方法 2圆角效率问题 离屏渲染 3calayer 与uiview 区别 为什么这么设计 4swift 消息机制 5 多线程如何保证线程安全...gcd与NSopraretion优缺点 7.tableview理解重用以及调优 8.异步加载图片原理 9.平常调试怎么做 10.gpu与cpu 离屏渲染 11.网络请求库封装 12.内存管理...6 一面 40分钟 自我介绍 算法题: 两个队列实现栈 分类extension 在oc与swift区别 在什么时机加载(没答上来) oc与swift语言区别 tableview做了哪些优化 如何实现多个图片下载后合成一张图片...除了gcd group之外 其他方法 信号量与锁区别 mvc和mvvm区别 为什么从swift开始学 如何学习iOS 有什么要问

2.5K20

iOS开发常用之网络、网页

所有缓存数据都可以自定义过期时间,默认是1天.EGOCache支持多线程(线程安全),UITableView加载多张照片导致内存上涨问题。...苹果提供过一个可达性类,用于检测网络状态但是该类由于年代久远,并不支持ARC该项目旨在提供一个苹果可达性类替代品,支持ARC和块使用方式iOS网络监测如何区分2,3,4G Reachability.swift...RealReachability - iOS实际网络连接状态检测,解决“如何判断设备是否真正连上互联网?而不是只有网络连接”问题。...SwiftValidator - 基于规则输入验证类库。项目良好面向对象设计思想,使规则扩展及自定义非常方便。...Proposer - Proposer用单个API处理iOS权限请求,以便使用前确认可访问“相册”,“相机”,“麦克风”,“通讯录”或“用户位置”。

5.3K10

深度学习图像识别项目(下):如何将训练好Kreas模型布置到手机中

AiTechYun 编辑:yxy 在上篇博文中,你学到了如何用Keras训练卷积神经网络 今天,我们将这种经过训练Keras模型部署到iPhone手机或者说iOSAPP中,在这里我们使用CoreML...如果你没有 LabelBinarizer对象,则需要修改代码以硬编码 class_labels集合 。 加载类标签和我们Keras模型: ?...在 第17-19行,我们加载我们类标签pickle文件,并将class_labels 作为列表存储 。 接下来,我们将训练好Keras模型加载到一行(第23行)。...AVFoundation框架是iOS影声媒介,我们用它从相机中捕捉。 我们使用 Vision框架为我们自定义CoreML模型分类,但这个框架容许远不止这些。...这个交给SwiftiOS专家吧! 兼容性说明: 此应用程序已在iPhone 6s,iPhone 7和iPhone X上用iOS 11.3进行了测试。我使用xCode 9.3构建应用程序。

5.3K40

AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架视频流App构建

首先,导航到 VideoFeedView.swift 并在 SwiftUI 导入正下方添加以下导入: import AVKit 看看下面这个,你会看到你已经有了一个列表和一个视频数组。...这就是应用程序如何用数据填充现有列表方式。 视频本身来自嵌入在应用程序包中 JSON 文件。 如果您好奇,您可以查看 Video.swift 以了解它们是如何获取。...2) 在这里,您获取 url 并创建一个 AVPlayer 对象。 AVPlayer 是在 iOS 上播放视频核心。 播放器对象可以启动和停止您视频,更改其播放速率,甚至可以调高和调低音量。...资产对象包含持续时间和创建日期等信息。 3) AVPlayerItem:AVAsset 动态对应物。此对象表示可播放视频的当前状态。这是您需要提供给 AVPlayer才能使事情顺利进行内容。...当您返回到feed时,预览会从停止地方恢复。 6. Trying Not to Steal the Show 如果您打算制作一个包含视频应用,那么考虑您应用将如何影响您用户非常重要。

6.9K10

老司机 iOS 周报 #77 | 2019-07-29

新手推荐 Flutter-Notebook @CrazyCoderShi:Flutter-Notebook 由 OpenFlutter 小组产出,包含了很多常规移动端开发组件/效果实现, 在目录最后还附上了一本...自定义单词嵌入,用于自定义单词标记模型,控制推荐算法。 文本目录,用于将同类型词汇按组标记,建立简单单词标记模型。...在这篇文章里,作者通过几个关键因素来帮助我们最大程度地重用代码,同时又能够避免让代码过于复杂或难以理解,从而取得良好平衡。...在瀑布流这种滚动展示图片列表中,可以使用计时器统计活动中图片,为活动中图片加载剩余部分。...Formatter - NSHisper @四娘:将数据转化为人类可读文本格式是一个重要且复杂任务,需要根据用户国家,语言,时区和货币等因素进行格式化,仅仅使用对象 description 是远远不够

93230

Photos存储、获取、更改照片详解

ALAssetsLibrary 在iOS9.0之后就被标记为过时方法,苹果建议使用Photos框架代替 问:UIImageWriteToSavedPhotosAlbum()保存图片很简单,但为什么还要用...框架功能十分强大,不止保存功能 下面详解Photos这个iOS8.0才出现新框架: 对 PhotoKit 基本构成介绍:(本文采取最新swift版本,OC得慢慢过渡到swift了) PHAsset...,也可以是相册集合,从PHCollection 类方法中获得 PHImageManager:用于处理资源加载加载图片过程带有缓存处理,可以通过传入一个 PHImageRequestOptions...您可以使用此对象对照片库中对象集执行更改,例如,编辑资源元数据或内容,插入新资源或重新排列集合成员,您还可以使用照片库对象来注册照片在内容或资源元数据和集合发生变化时发送消息,并验证用户是否已授权您应用访问照片内容...,并获取每一个相册中PHAsset对象 func fetchAllUserCreatedAlbum() { //获取自定义相册 let topLevelUserCollections

2K90

干货 | 深入浅出Apple响应式框架Combine

Combine 作用是将异步事件通过组合事件处理操作符进行自定义处理。关注如何处理变化值,正是响应式编程核心。 Combine可以概述为一种声明式函数响应式编程,简洁用下图表示: ?...然后通过sink产生订阅者连接,sink方法返回是Anycancellabel对象,它表示一个发布者和订阅者链接可取消,通过store方法将其保存在外部变量setList数组中,这样能保证订阅者不会被释放...三、实战 3.1 自定义Publishers和Subscribers iOS13系统内置了诸如KVO,Notification,URLSession,TimerPublisher,所以大部分场景开发者不需要自定义...UIKit本身自带了很多UI控件事件,但iOS系统本身确没有给出内置publisher,为此我们需要自定义UIControlPublisher。...+NotificationCenter.swift进一步了解Publisher和Subscriber是如何协同工作原理。

3.6K31
领券