我已经解决了这个问题,但它并不漂亮。
它从我的iMac上的iPhoto 8('09)开始。这个库有一堆“参考”照片,即图像文件在iPhoto Library文件夹之外的照片。在iPhoto 8中,这是通过在iPhoto Library文件夹的Originals文件夹中创建OS X别名文件来处理的。
然后我想把我的图书馆搬到新的MacBook Air上运行Lion和iPhoto 9('11)。忘记我在我的库中引用了文件我只是将iPhoto Library文件夹从我的iMac复制到我的MacBook Air,正如Apple支持文档所说的那样(他们没有提到有关引用文件的任何内容)。当然引用的文件没有复制到MacBook,但一切似乎都没问题。
在我的MacBook上启动iPhoto 9,它会升级库。它当然找不到参考图像,但没有任何警告或任何东西。iPhoto 9具有完全不同的文件夹和数据库结构。现在,iPhoto Library / Database / apdb /中的Library.apdb SQlite数据库文件中所需的有关查找图像位置的所有信息。在该数据库中有一个名为RKMaster的表,它存储有关每张照片的信息。RKMaster有一个名为imagePath的列,它是原始图像文件的完整路径所在的位置。但是,由于在iPhoto图库升级期间我的参考图像不可用,因此只需将这些图像全部设置为Masters/<image file name>
,并将iPhoto 8数据库中的别名信息存储在名为fileAliasData的BLOB列中。当我找到参考文件丢失时,我将它们复制到我的MacBook上,由于数据库中fileAliasData列中的信息,iPhoto奇迹般地能够再次找到它们。
但是,iTunes和链接到iPhoto图库的其他应用程序不会直接访问iPhoto Library数据库。他们在iPhoto Library文件夹中使用名为AlbumData.xml的文件。每次关闭iPhoto时,iPhoto 9都会重新创建此文件。不幸的是,它用于构建放入XML文件的完整图像路径的内容是存储在数据库中的imagePath列中的内容,现在基本上是垃圾。iPhoto可以看到所有文件正常,但没有别的可以。
唯一的解决方案是精心修复所有引用文件的RKMaster记录,以便它们指向正确的位置。我借此机会将文件复制到iPhoto Library文件夹中,以便现在我的所有图像都在iPhoto Library文件夹中。这隐含的设置fileIsReferenced = 0
和fileAliasData = null
那些记录也是如此。
现在我终于让一切都恢复了,但这是一个非常漫长而乏味的过程,只能通过SQL数据库的一些知识来完成。在建议如何移动iPhoto图库时,Apple应该真的警告人们这个潜在的问题。