簡體   English   中英

在Mac上預創建陣列,將其添加到主捆綁包中以在iOS App中訪問

[英]Pre-create Array on Mac, add it to main bundle to access in iOS App

在我的應用程序中,我使用自己創建的點數組來使用CGPath遮罩圖像。

所以看起來像這樣

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腳本。 腳本的第一個參數將接受App主捆綁文件夾位置(將在第二步中傳遞)。 CreatePointsArrayArchive.swift文件添加到您的項目,並且不要將其添加到任何target

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. 打開您的項目構建目標並運行腳本階段:

    在此處輸入圖片說明

  2. 在腳本文本區域中鍵入以下行:

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

    ...屏幕截圖:

    在此處輸入圖片說明

3.從iOS上的應用程序主捆綁包中取消存檔文件

要在iOS App中訪問存檔,請使用以下代碼:

// 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM