在此强制中断期间,我正在开发我的应用程序,由于使用了Catalyst,我尝试将其发布到Mac OS。 但是我在关键功能上遇到了一个大问题:我正在使用NSFileWrapper来(反)序列化我的Core Data文件(存储,shm和wal)。在iPhone上可以正常工作,但在Mac OS上却不能...
代码如下:
- (NSData *) bundleContents {
// Make sure project has been saved on device
if (!self.project.fileExists) return nil;
// Create the file wrappers
NSFileWrapper *store = [[NSFileWrapper alloc] initWithURL:[self _storeContainerURL] options:0 error:nil];
NSFileWrapper *additionalContent = [[NSFileWrapper alloc] initWithURL:[self _additionalContentContainerURL] options:0 error:nil];
NSMutableDictionary *fileWrappers = [NSMutableDictionary dictionaryWithCapacity:2];
fileWrappers[[self.class _storeContainerName]] = store;
// if (additionalContent) fileWrappers[[self.class _additionalContentContainerName]] = additionalContent;
NSFileWrapper *versionBundle = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:fileWrappers];
// Serialize bundle and compress it
NSLog (@"Store Serialized RAW Data: %d bytes", store.serializedRepresentation.length);
NSLog (@"Contents:");
NSDictionary *wrappers = store.fileWrappers;
for (NSString *filename in wrappers) {
NSFileWrapper *wrapper = wrappers[filename];
NSLog(@"-- %@: %d bytes", filename, wrapper.serializedRepresentation.length);
}
NSLog (@"Bundle: %d bytes", versionBundle.serializedRepresentation.length);
return [versionBundle.serializedRepresentation compressedData];
}
在iPhone上运行时,它正在记录:
Store Serialized RAW Data: 376969 bytes
Contents:
-- persistentStore-shm: 49244 bytes
-- persistentStore: 163924 bytes
-- persistentStore-wal: 173068 bytes
Bundle: 376969 bytes
看起来不错(商店目录为377kB,这似乎与所包含的文件包装器(商店,shm和wal文件)的总和相对应。最终输出的权重是相同的,因为我们不包括此刻(无论如何都是空的)。
但是在Mac上运行时,不会得到相同的结果:
Store Serialized RAW Data: 3387669 bytes
Contents:
-- persistentStore: 151636 bytes
-- persistentStore-wal: 160780 bytes
-- persistentStore-shm: 36956 bytes
Bundle: 9015573 bytes
Store目录的权重为3.4MB(!!),与任何内容都不对应。它所包含的文件包装程序总计仍不到400kB。 更奇怪的是,最终输出文件(捆绑包)为9MB,而其中仅包含Store目录及其3个文件。
有人知道我的代码有什么问题吗?
非常感谢!从昨天开始我就一直坚持下去。
托马斯