- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在我正在开发的应用程序中构建图像缓存,其中缓存是一个 NSMutableDictionary。
最初字典是这样的:
NSMutableDictionary *imageCacheDictionary = [NSMutableDictionary initWithContentsOfURL:imageCacheURL];
//alloc-init imageCacheDictionary if nil
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
NSString *imageURLAsString = [imageURL absoluteString];
[imageCacheDictionary setObject:imageData forKey:imageURLAsString];
if ([imageCacheDictionary writeToURL:cacheURL atomically:YES]) {
NSLog(@"file written");
} else {
NSLog(@"file NOT written");
}
这很顺利。
然后当我决定添加代码以将缓存保持在一定大小以下时,我尝试添加一个标签以便我可以先删除最旧的照片。
NSMutableDictionary *imageCacheDictionary = [NSMutableDictionary initWithContentsOfURL:imageCacheURL];
//alloc-init imageCacheDictionary if nil
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
NSString *imageURLAsString = [imageURL absoluteString];
NSDate *currentTime = [NSDate date];
NSDictionary *imageDataWithTime = @{currentTime : imageDataWithTime};
[imageCacheDictionary setObject:imageDataWithTime forKey:imageURLAsString];
if ([imageCacheDictionary writeToURL:cacheURL atomically:YES]) {
NSLog(@"file written");
} else {
NSLog(@"file NOT written");
}
哪个没用。
据我所知,NSDate 符合属性列表,因此 writeToURL 应该允许您写入磁盘,但不行。
然后我尝试使用 NSKeyedArchiver 将其转换为 NSData。
...
NSData *currentTimeAsData = [NSKeyedArchiver archivedDataWithRootObject:[NSDate date]];
NSDictionary *imageDataWithTime = @{currentTimeAsData : imageData};
...
还是不行。
但是如果我将 NSDate 对象转换为 NSString 或只是用 NSString 替换它,它就可以正常工作。
...
NSString *currentTime = [[NSDate date] description];
NSDictionary *imageDataWithTime = @{currentTime : imageData};
...
或者:
...
NSString *currentTime = @"Hey! Now is now!";
NSDictionary *imageDateWithTime = @{currentTime : imageData};
...
那么……为什么?如果 NSDate 和 NSData 都符合属性列表,为什么它们都没有写入嵌套字典内的磁盘,而 NSString 写入正常?
最佳答案
属性列表键必须是字符串,不能是日期。 This page here说:
And although NSDictionary and CFDictionary objects allow their keys to be objects of any type, if the keys are not string objects, the collections are not property-list objects.
你需要的是字典中的字典,例如:
NSDictionary *imageInfo = @{ @"date" : [NSDate date], @"data" : imageData };
NSDictionary *mainCacheDict = @{ imageURLAsString : imageInfo };
这样,缓存字典仍然以字符串 URL 作为键,但值是包含日期和图像数据的第二个字典(使用字符串键 @"date"
访问)和@“数据”
)。这是符合属性列表的,因此您可以继续使用 writeToFile:
和 initWithContentsOfFile:
方法。
关于ios - 使用 writeToURL 将 NSDate 保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19533467/
我正在尝试将 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”文
我是一名优秀的程序员,十分优秀!