【问题标题】:How writeToFile in a .playground?如何在 .playground 中 writeToFile?
【发布时间】:2015-05-07 23:15:36
【问题描述】:

我编辑了一个.plist 文件。我是怎么理解的:由于沙盒,只能读取Resources 目录中.playgrounds 文件中的文件。但是怎么可能把编辑好的文件写入这个文件夹呢?

// read file
let xmlPath: String = NSBundle.mainBundle().pathForResource("Settings", ofType: "plist")!
var xmlDictionary: [String : AnyObject] = NSDictionary(contentsOfFile: xmlPath) as Dictionary<String, AnyObject>

// editing file
// ...

// saving file
let saveDict: NSDictionary = xmlDictionary as NSDictionary
let savePath: String = xmlPath.stringByDeletingLastPathComponent.stringByAppendingPathComponent("Saved.plist")
saveDict.writeToFile(savePath, atomically: false) // ~> false

无论savePathxmlPath 是否有效,返回false 表示不成功

如果我可以替换 .plist 文件的旧(未编辑)版本会很好,但保存到新文件也可以。

【问题讨论】:

    标签: swift save plist swift-playground


    【解决方案1】:

    你可以。

    通过查看其源代码,使用您当前的plist 作为模板。

    然后把它赋值给一个字符串

    let newPlist: String = 
    """
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>CFBundleDevelopmentRegion</key>
        <string>$(DEVELOPMENT_LANGUAGE)</string>
        <key>CFBundleExecutable</key>
        <string>$(EXECUTABLE_NAME)</string>
        <key>CFBundleIconFile</key>
        <string></string>
        <key>CFBundleIdentifier</key>
        <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>CFBundleName</key>
        <string>$(PRODUCT_NAME)</string>
        <key>CFBundlePackageType</key>
        <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
        <key>CFBundleShortVersionString</key>
        <string>1.0</string>
        <key>CFBundleVersion</key>
        <string>1</string>
        <key>LSMinimumSystemVersion</key>
        <string>$(MACOSX_DEPLOYMENT_TARGET)</string>
        <key>NSHumanReadableCopyright</key>
        <string>Copyright © 2020 YourName. All rights reserved.</string>
        <key>NSMainStoryboardFile</key>
        <string>Main</string>
        <key>NSPrincipalClass</key>
        <string>NSApplication</string>
        <key>NSSupportsAutomaticTermination</key>
        <true/>
        <key>NSSupportsSuddenTermination</key>
        <true/>
        <key>TDAMERITRADE_API_KEY</key>
        <string></string>
        <key>ACCOUNT_ID</key>
        <string></string>
        <key>CFBundleURLSchemes</key>
        <string>YourName.YourProjName</string>
    </dict>
    </plist>
    """
    

    然后使用 url 的 filePath 对字符串调用 write 方法。

    let url: URL = URL(fileURLWithPath: "/Users/username/Desktop/iOS/YourProj/YourProj/info.plist")
    newPlist.write(to: url, atomically: true, encoding: .utf8)
    

    【讨论】:

      【解决方案2】:

      修改主包中的文件似乎是不可能的,see earlier question。您可以做的是保存到沙盒应用程序文件夹中,可以像这样检索其 URL:

       func applicationDirectory(directory:NSSearchPathDirectory) -> NSURL? {
      
          var appDirectory:String?
          var paths:[AnyObject] = NSSearchPathForDirectoriesInDomains(directory, NSSearchPathDomainMask.UserDomainMask, true);
          if paths.count > 0 {
              if let pathString = paths[0] as? String {
                  appDirectory = pathString
              }
          }
          if let dD = appDirectory {
              return NSURL(string:dD)
          }
          return nil
      }
      
      
      
      func applicationTemporaryDirectory() -> NSURL? {
      
          if let tD = NSTemporaryDirectory() {
              return NSURL(string:tD)
          }
      
          return nil
      
      }
      
      applicationTemporaryDirectory()
      
      applicationDirectory(NSSearchPathDirectory.DocumentDirectory)
      

      网址将显示在 Playground 的右侧,然后只需复制并粘贴到 Finder -> Go -> Go to Folder 对话框中。

      GitHub 存储库: 如需完整的工作示例,请参阅 GitHub repo

      【讨论】:

        猜你喜欢
        • 2016-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多