NSFileWrapper在iPhone和Mac OS(催化剂)上的权重不同

时间:2020-03-18 09:18:39

标签: catalyst nsfilewrapper

在此强制中断期间,我正在开发我的应用程序,由于使用了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个文件。

有人知道我的代码有什么问题吗?

非常感谢!从昨天开始我就一直坚持下去。

托马斯

0 个答案:

没有答案