- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个卡片数组,正面和背面都有文字。现在我想将这些数据存储在我创建并添加到我的项目中的 csv 文件中。以下代码创建以逗号分隔的字符串数组,然后尝试将其写入文件。但是文件仍然是空的。代码中没有显示错误。知道我在这里做错了什么吗?
let path = NSBundle.mainBundle().pathForResource("cardsFile", ofType:"csv")
for i in 0...cards.count - 1{
let card = [cards[i].front,cards[i].back]
let cardRow:String = card.joinWithSeparator(",")
print(cardRow)///confirmed - carRow is not empty
do {
try cardRow.writeToURL(NSURL(fileURLWithPath: path!), atomically: false, encoding: NSUTF8StringEncoding)
}
catch {}
}
最佳答案
没有显示任何错误,因为您捕获了错误但没有做任何事情。在catch
block 中添加print(error)
:
do {
try cardRow.writeToURL(NSURL(fileURLWithPath: path!), atomically: false, encoding: NSUTF8StringEncoding)
}
catch {
print(error)
}
问题是您正在尝试写入包中的文件,但包是只读的。您应该尝试写入文档文件夹:
let fileURL = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false)
.URLByAppendingPathComponent("cardsFile.csv")
顺便说一句,writeToFile
将替换输出文件。如果您想将数据写入文件,并在进行过程中追加数据,您可能需要使用 NSOutputStream
:
let fileURL = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false).URLByAppendingPathComponent("cardsFile.csv")
guard let stream = NSOutputStream(URL: fileURL, append: false) else {
print("unable to open file")
return
}
stream.open()
for card in cards {
let data = "\(card.front),\(card.back)\n".dataUsingEncoding(NSUTF8StringEncoding)!
guard stream.write(UnsafePointer<UInt8>(data.bytes), maxLength: data.length) > 0 else {
print("unable to write to file")
break
}
}
stream.close()
如果目标只是将其保存在本地,我不会使用 CSV 格式。我会改用原生格式,例如 NSKeyedArchiver
。因此,首先通过实现 init?(coder:)
和 encodeWithCoder()
使 Card
符合 NSCoding
协议(protocol):
class Card: NSObject, NSCoding {
let front: String
let back: String
init(front: String, back: String) {
self.front = front
self.back = back
super.init()
}
required convenience init?(coder aDecoder: NSCoder) {
guard let front = aDecoder.decodeObjectForKey("front") as? String else { return nil }
guard let back = aDecoder.decodeObjectForKey("back") as? String else { return nil }
self.init(front: front, back: back)
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(front, forKey: "front")
aCoder.encodeObject(back, forKey: "back")
}
override var description: String { get { return "<Card front=\(front); back=\(back)>" } }
}
然后,当你想保存时:
let fileURL = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false)
.URLByAppendingPathComponent("cardsFile.bplist")
if !NSKeyedArchiver.archiveRootObject(cards, toFile: fileURL.path!) {
print("error saving archive")
}
当你想从文件中读取它时:
guard let cards2 = NSKeyedUnarchiver.unarchiveObjectWithFile(fileURL.path!) as? [Card] else {
print("problem reading archive")
return
}
print(cards2)
关于swift - 我想在 swift 中使用 writeToURL 将字符串写入本地文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37649599/
我正在尝试将 NsData 文件保存到目录中。这是我的方法的代码: - (void)cacheImage:(NSData *)imageData withTitle:(NSString *)title
是否可以使用: [NSMutableArray writeToURL:(NSString *)path atomically:(BOOL)AuxSomething]; 为了将文件 (NSMutable
我已经尝试了一个星期让 writeToUrl 工作,但是没有……没有。我只是想通过 iPhone 应用程序更新服务器上的文件。这是代码: NSURL *url = [NSURL URLWithStri
更新 #1:忘记提及这是在 iPad 应用程序上运行 这是我修改后的代码(仍然不能用,但是去掉了不必要的代码): NSURL *tmpDirURL = [NSURL fileURLWithPa
我正在尝试实现保存功能来保存 html 文件。目前,当我尝试保存时它会返回错误。我的代码是 - (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSStri
我扩展了一个具有简单导入/导出功能的应用程序,该功能使用 plist 文件来存储导出的对象。为了保存对象,我使用 NSDictionary 和 writeToURL 方法(沙盒应用程序)。 代码的相关
我正在 iPhone 5s 上测试我的应用程序,在此应用程序中我使用 NSData.writeToURL(destinationUrl, atomically: true) 保存音频文件, 但这条线不
也许有人可以在这里解释一下或发送给我正确的文档? 我已经阅读了 IOS 文档,但仍然无法理解,我什么时候使用 writeToURL 方法。也许问题出在我身上,如果除了我以外的其他人都明白这一点,但如果
我正在将代码转换为 swift 3 语法 if !data.writeToURL(manifestFileURL, atomically: false) { self.didFailWit
我正在用自定义对象数组替换 NSMutableDictionary 对象数组。每个都有 15 个左右的实例变量需要持久化,还有一些是 transient 的。 我曾经使用 -initWithConte
我正在我正在开发的应用程序中构建图像缓存,其中缓存是一个 NSMutableDictionary。 最初字典是这样的: NSMutableDictionary *imageCacheDictionar
我有一个卡片数组,正面和背面都有文字。现在我想将这些数据存储在我创建并添加到我的项目中的 csv 文件中。以下代码创建以逗号分隔的字符串数组,然后尝试将其写入文件。但是文件仍然是空的。代码中没有显示错
我正在开发一个基于文档的应用程序,并且我想使用文档包作为我的文件格式。为此,我需要重写的 NSDocument 方法似乎是 -writeToURL:ofType:error:. 有时它会起作用,但仅在
我正在尝试使用 writeToUrl 动态更新 SSL 证书,但出现此错误: // Returns the first certificate in the cert chain SecCertifi
我正在尝试找出使用 NSFileWrapper 保存文件包的最有效方法。 当我保存文件包装器时,我不使用原子写入并提交之前内容的 URL。 但是,第二次写入总是失败,并出现错误:“Code=516”文
我是一名优秀的程序员,十分优秀!