2010-03-12 78 views
0

我正在使用Xcode中的ID3框架(它已经消失在网络面前 - 包括谷歌缓存!)。我该如何解决“Xcode无法找到源文件”

我测试了一个导入mp3功能,允许他们在导入标签时对其进行编辑。其中一个测试用例是一个损坏或无效的mp3,没有正确的id3头文件。我遇到的问题是,当更新无效mp3(updateFile:)的标签时,ID3框架尝试使用id3V1Tag.m(我认为如果找不到v2标签,它会回落到这个位置),这就是我得到的Xcode错误(同时运行的程序,而不是建):

Xcode could not locate source file: id3V1Tag.m (line: 299)

即使在发布版本这个崩溃的程序,所以它不是我真的可以忽略不计。

我试着把一个try/catch块放在它的周围,但它不被视为一个异常,所以不会被捕获。为文件加载标签数据的函数返回一个BOOL,但是如果给定的文件不存在,它只会返回false,所以这也没有帮助。

当前代码:

[tagData release]; 
tagData = [[TagAPI alloc] initWithGenreList:nil]; 
tagsLoaded = [tagData examineFile:exportPath]; 
if(tagsLoaded) { 
    [tagData setTitle:title]; 
    [tagData setArtist:artist]; 
    [tagData setComments:comments]; 
    @try { 
     [tagData updateFile]; 
    } 
    @catch (id e){ 
     NSLog(@"h"); 
    } 
} 

回答

2

你得到的错误是Xcode试图找到你的源文件id3V1Tag.m,以便在调试过程中显示它。没有你写的代码会影响这个。

如果您的框架发行版中没有id3V1Tag.m源文件,那么您无法对此做任何事情,并且除了忽略它之外没有什么可做的(除了看看是否可以避免导致它被请求,就像不在其中设置断点一样,不会进入它,也不会崩溃)。

如果你确实拥有它,并且正在构建它,那么也许你没有建立正确的调试信息,所以你必须告诉我们更多关于你的构建设置。

+0

澄清:该应用程序已经崩溃。当Xcode尝试帮助您调试崩溃时,会出现该消息;它来自Xcode,而不是ID3框架(它不是Xcode的一部分,也没有Xcode Tools),并且不是崩溃的原因。 – 2010-03-13 23:40:13

+0

我没有这个文件,所以没有很多我可以在那里做。该方法似乎将自己调用缺少的文件,并且是我可以在框架中看到的将保存标签的唯一方法,所以我不能逃避不调用它。我很想忽略它,但它会使程序崩溃,所以我不能。如果try/catch发现崩溃就没事了,显然它不会,因为它不是一个例外,但是没有其他方法可以模拟try/catch行为(我不在乎崩溃/错误的细节) ? – Septih 2010-03-15 13:25:07

+0

这不是调用缺少文件的*方法*。代码崩溃了。 Xcode试图通过向您显示崩溃方法的源代码来帮助您,但您没有它 - 这基本上就是警告所说的。 这里的主要问题是您的代码导致框架崩溃。关于丢失文件的警告只是一种后果;你应该专注于消除碰撞本身。 – cdespinosa 2010-03-16 17:15:46

0

所以你遇到的问题是,当你尝试编译id3V1Tag.m或运行程序时,程序发生崩溃。我对此有点困惑。

如果它在运行时崩溃也许这是从库中缺少代码文件的问题?你如何准确读取ID3标签信息?它是通过你自己的代码还是通过第三方库/类来实现的。

+0

它在程序运行期间崩溃,特别是在调用updateFile时:。 ID3标签是通过第三方库读取的,我认为它缺少这个文件,因为我自从下载它们以后就没有碰过这些文件。 – Septih 2010-03-13 09:57:07

+0

这是有道理的。奇怪的是我在周末遇到了这个完全相同的错误。如果我记得正确的话,问题就像你所说的那样。实施文件丢失。你的项目中是否有一个名为“id3V1Tag.m”的文件?如果它已经包含在内,你可能想尝试从你的项目中删除它并重新添加它。 – 2010-03-15 14:00:19

+0

对,我做了一次聚光灯搜索,并在原始下载中找到了.m文件,因此将其添加到框架中,发现它抛出了一个错误的访问异常(尽管这不会触发我原来的代码中的catch)。我给函数添加了断点,但没有打到它们。删除它并重新添加它并没有什么区别。 – Septih 2010-03-16 09:47:02

相关问题