【问题标题】:Referencing file on disk from NSManagedObject从 NSManagedObject 引用磁盘上的文件
【发布时间】:2010-05-09 05:40:13
【问题描述】:

命名与 NSManagedObject 关联的文件的最佳方法是什么? NSManagedObject 将保存此文件的 URL。

但我需要为我的文件创建一个唯一的文件名。是否有某种我可以使用的自动增量 ID?我应该使用 mktemp(但它不是临时文件)还是尝试将 NSManagedObjectId 转换为文件名?但我担心会有特殊字符可能会导致问题。

你有什么建议?

编辑:我有很多这样的 NSManagedObjects,每个都有自己的图像,所以我想为每张图片生成一个唯一的名称。

【问题讨论】:

    标签: iphone file core-data nsmanagedobject


    【解决方案1】:

    您可以使用NSProcessInfo 来生成 guid:

    [[NSProcessInfo processInfo] globallyUniqueString]
    

    要引用文件,我建议将 guid 保留为 NSManagedObject 属性,然后从应用程序支持目录中引用该名称的文件。

    【讨论】:

    • 谢谢。但是,我有很多这样的 NSManagedObjects。他们都有图像。我的问题更多是如何将图像与不同的 NSManagedObjects 区分开来。
    【解决方案2】:

    有一个很好的方法可以做到这一点,一个较早的答案几乎就是这样 - 为每个图像而不是整个过程生成一个 GUID。每当需要唯一字符串时调用此方法,然后将其存储在托管对象中:

    + (NSString *)getUUID
    {
        CFUUIDRef theUUID = CFUUIDCreate(NULL);
        CFStringRef string = CFUUIDCreateString(NULL, theUUID);
        CFRelease(theUUID);
        return [(NSString *)string autorelease];
    }
    

    我用它来存储捕获的电影和图像。

    【讨论】:

      【解决方案3】:

      我考虑过使用时间来生成唯一的文件名,但我不喜欢这个解决方案,例如,如果时间被重置或更改,则有可能获得两次相同的文件名。

      我很惊讶没有在网上找到有关此主题的更多信息。

      【讨论】:

        【解决方案4】:

        从 iOS5 开始,现在可以选择将大型 blob 存储在外部记录文件中。 CoreData根据记录的大小决定是否将记录存储在sqlite中。

        Storing blobs in external location using built-in CoreData option

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-25
          • 2011-02-14
          • 2021-03-29
          • 2020-04-15
          • 2020-10-17
          • 1970-01-01
          • 2016-02-20
          • 1970-01-01
          相关资源
          最近更新 更多