1

パスを指定して、このコードを使用してアセットをアップロードしています。

func uploadFile(filePath: String) {
    let fileURL = NSURL(fileURLWithPath: filePath)
    let asset = CKAsset(fileURL: fileURL)

    let assetRecord = CKRecord(recordType: CloudManager.mediaRecordTypeName())
    assetRecord.setObject(asset, forKey: CloudManager.mediaAssetKey())

    println("asset before: \(asset)")
    println("asset file url before: \(asset.fileURL)")

    CKContainer.defaultContainer().publicCloudDatabase.saveRecord(assetRecord) {
            (record: CKRecord?, error: NSError?) -> Void in
            if record == nil || error != nil {
                println("error: \(error)")
                return
            }

        let asset = record!.objectForKey(CloudManager.mediaAssetKey()) as! CKAsset?

    }
}

パスが既存のファイルを指していることはわかっていますUIImage(contentsOfFile: filePath)。パスは次のようになります。

/var/mobile/Containers/Data/Application/2491A1A6-55C7-4236-B0DA-FEA894799DF2/Documents/MediaCache/85CDCF7C-9DFF-40E8-A8F4-B60F0157DA98.jpg

したがって、この関数でこれと同じファイル パスを使用します。ログは次のとおりです。

asset before: <CKAsset: 0x1701830c0; path="/var/mobile/Containers/Data/Application/2491A1A6-55C7-4236-B0DA-FEA894799DF2/Documents/MediaCache/85CDCF7C-9DFF-40E8-A8F4-B60F0157DA98.jpg", UUID=0DC9CE7B-25B7-4D3D-967E-6544ABE5D552>

asset file url before: file:///var/mobile/Containers/Data/Application/2491A1A6-55C7-4236-B0DA-FEA894799DF2/Documents/MediaCache/85CDCF7C-9DFF-40E8-A8F4-B60F0157DA98.jpg

error: Optional(<CKError 0x170050740: "Asset File Not Found" (16/3002); "Can't read the file">)

渡された filePath を変更して、実際には存在しないファイルを指すようにすると、同じ結果が得られます。したがって、ファイルの検索に失敗しているように見えます。ファイルが存在することはわかっているので、おそらくそれは、filePath で渡している形式です。

行をコメントアウトすると、assetRecord.setObject(assetエラーなしで成功します。もちろん、record!.objectForKeynil です。

4

0 に答える 0