ios - 在 Mac 上预先创建数组,将其添加到主包中以在 iOS 应用程序中访问

标签 ios swift mainbundle

在我的应用程序中,我使用自行创建的点数组来通过 CGPath mask 图像。

所以看起来像这样

let pnt1 = CGPointMake(0, 33)
    let pnt2 = CGPointMake(33, 66)
    let pnt3 = CGPointMake(47, 71)
    let pnt4 = CGPointMake(66, 65)
    let pnt5 = CGPointMake(79, 69)
    let pnt6 = CGPointMake(90, 67)
    let pnt7 = CGPointMake(116, 36)
    let pnt8 = CGPointMake(93, 8)
    let pnt9 = CGPointMake(59, 0)
    let pnt10 = CGPointMake(37, 0)
    var pntz = NSMutableArray()
    pntz.addObject(NSValue(CGPoint: pnt1))
    pntz.addObject(NSValue(CGPoint: pnt2))
    pntz.addObject(NSValue(CGPoint: pnt3))
    pntz.addObject(NSValue(CGPoint: pnt4))
    pntz.addObject(NSValue(CGPoint: pnt5))
    pntz.addObject(NSValue(CGPoint: pnt6))
    pntz.addObject(NSValue(CGPoint: pnt7))
    pntz.addObject(NSValue(CGPoint: pnt8))
    pntz.addObject(NSValue(CGPoint: pnt9))
    pntz.addObject(NSValue(CGPoint: pnt10))

我想要的是,我可以将所有数组写入一个文件,然后在我的应用程序启动后,我将该文件加载到应用程序并使用这些数组。我想这样做是因为这些数组每 4-5 秒创建一次,我想这不好。

最佳答案

基本上这就是您需要做的:

  1. 将您的阵列存档到 MAC 上;并用 Swift 代码完成!
  2. 将此文件添加到 MAC 上应用的主包中
  3. 从 iOS 上的应用主包中解压文件

棘手的部分是您需要自动完成这一切。

1。将您的数组存档到 MAC 上的文件并使用 Swift 代码完成!

创建使用数组生成存档的 Swift 脚本。脚本的第一个参数将接受应用程序主包文件夹位置(它将在第二步传递)。将 CreatePointsArrayArchive.swift 文件添加到您的项目中,并且不要将其添加到任何目标

CreatePointsArrayArchive.swift的内容:

import Foundation
import Cocoa

println("MY APP: Generating points array archive...")

let archiveFileName = "MyPointsArray.archive"
let resourcesFolderPath = Process.arguments[1] // access first element because 0 contains this script file name

// YOUR CODE:
let pnt1 = CGPointMake(0, 33)
let pnt2 = CGPointMake(33, 66)
let pnt3 = CGPointMake(47, 71)
let pnt4 = CGPointMake(66, 65)
let pnt5 = CGPointMake(79, 69)
let pnt6 = CGPointMake(90, 67)
let pnt7 = CGPointMake(116, 36)
let pnt8 = CGPointMake(93, 8)
let pnt9 = CGPointMake(59, 0)
let pnt10 = CGPointMake(37, 0)
var pntz = NSMutableArray()
pntz.addObject(NSValue(point: pnt1))
pntz.addObject(NSValue(point: pnt2))
pntz.addObject(NSValue(point: pnt3))
pntz.addObject(NSValue(point: pnt4))
pntz.addObject(NSValue(point: pnt5))
pntz.addObject(NSValue(point: pnt6))
pntz.addObject(NSValue(point: pnt7))
pntz.addObject(NSValue(point: pnt8))
pntz.addObject(NSValue(point: pnt9))
pntz.addObject(NSValue(point: pnt10))


// Archiving array to file
if NSKeyedArchiver.archiveRootObject(pntz, toFile: archiveFileName) {
    println("    Array points archive generated SUCCESSFULY wit hfile name '\(archiveFileName)'.")
} else {
    println("    FAILED to generate array points archive.")
}

// Copy file to app budle
println("MY APP: Copying '\(archiveFileName)' to app main bundle at path '\(resourcesFolderPath)'...")
var err: NSError?
if NSFileManager.defaultManager().copyItemAtPath(archiveFileName, toPath: resourcesFolderPath + archiveFileName, error: &err) {
    println("    '\(archiveFileName)' file added to app main bundle.")
} else {
    println("    FAILED to add '\(archiveFileName)' to app main bundle.")
}

...所以在第一步之后,项目的根文件夹中有 CreatePointsArrayArchive.swift 文件;使用上面列出的代码。

2。将此文件添加到 MAC 上应用的主包中

您需要将其作为构建步骤来执行。这是您需要执行的操作:

  1. 打开项目构建目标和运行脚本阶段:

    enter image description here

  2. 在脚本文本区域中键入以下行:

    xcrun swift -sdk $(xcrun --show-sdk-path --sdk macosx) CreatePointsArrayArchive.swift ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/
    

    ...截图:

    enter image description here

3。在 iOS 上从应用程序的主包中取消存档文件

要在 iOS 应用程序中访问您的存档,请使用以下代码:

// NOTE: MyPointsArray.archive is name of the file that was defined in CreatePointsArrayArchive.swift file
let pointsArchivePath = NSBundle.mainBundle().pathForResource("MyPointsArray", ofType: "archive")
let pointsArr = NSKeyedUnarchiver.unarchiveObjectWithFile(archivePath) as NSArray

关于ios - 在 Mac 上预先创建数组,将其添加到主包中以在 iOS 应用程序中访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25199303/

相关文章:

ios - 在另一行删除动画之后插入行

swift - 如何从解析中检索 geoPoints 并将其存储在 tableView 中?

swift - Swift 中的可空整数

ios - 我可以在 iOS 上将普通的 OpenGL ES 2.0 与 Kobol2D/cocos2d 混合使用吗?

ios - 在 Xcode 6.4 中使用 Swift2.0 pod

ios - Swift 2 - m4a 文件无法在 iOS 上播放

ios - 是否可以使 main bundle 在 IOS 中可写?

objective-c - 使用 nsfilemanager 设置文件夹的权限

ios - 引用 iOS 应用程序的 Xcode 项目中的目录

ios - NSBundle.mainBundle() 返回 nil