我从斯坦福 ios 课程下载了这个应用程序,我有自己的 flickr api 密钥,并将其放在 FlickrAPIKey.h 中,但它仍然给我一个空的摄影师 tableView。我不确定它是否相关,但我收到了这些日志消息:
2012-03-11 09:18:46.848 Photomania[23748:1e03] NSFileCoordinator:一个令人惊讶的服务器错误信号。详细信息:连接无效
我发现了问题。如果其他人遇到这个问题,这里是解决方案(在我的情况下):如果文件尚未创建,应用程序只会下载数据,所以我第一次运行它时,我还没有放 flickr 键,所以它创建了没有数据的文件。当我再次使用密钥运行应用程序时,它从未从 flickr 下载数据,因为它已经有了文件(没有数据。
这是我在PhotographersTableViewControler.m 中更改的代码
- (void)useDocument
{
if (![[NSFileManager defaultManager] fileExistsAtPath:[self.photoDatabase.fileURL path]]) {
// does not exist on disk, so create it
[self.photoDatabase saveToURL:self.photoDatabase.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
[self setupFetchedResultsController];
[self fetchFlickrDataIntoDocument:self.photoDatabase];
}];
} else if (self.photoDatabase.documentState == UIDocumentStateClosed) {
// exists on disk, but we need to open it
[self.photoDatabase openWithCompletionHandler:^(BOOL success) {
[self setupFetchedResultsController];
//the next line is the only one I changed!!!!!!
[self fetchFlickrDataIntoDocument:self.photoDatabase];
}];
} else if (self.photoDatabase.documentState == UIDocumentStateNormal) {
// already open and ready to use
[self setupFetchedResultsController];
}
}
第一次之后,您可以删除该行。我希望有人能从我的错误中吸取教训。
@litov 是的,您确实可以这样做,尽管在这种情况下,我发现从 iPhone/iPad 或模拟器中删除应用程序要容易得多;然后数据库文件也将被删除。
Litov,看起来您的解决方案每次都会再次获取数据。我猜你没有得到任何重复,因为我认为 fetchFlickrData... 的实现是通过唯一 id 检查现有记录,并且只加载那些尚未加载的记录。
尽管如此,每次启动应用程序时它都会从 Flickr 获取数据,这很慢。
但是,由于您知道问题在于您没有为第一次运行正确设置,因此您可以在没有此 hack 的情况下解决该问题:我在基于此演示的项目中遇到了类似的问题,我通过删除数据库文件解决了它从模拟器。
您可以通过进入 ~/Library/Application Support/iPhone Simulator/5.1/Applications/ 并在数据库上执行“rm -fr”在文件系统中执行此操作(它将是一个具有您给它的名称的目录。请注意该路径中的“5.1”取决于您正在运行的模拟器的版本,并且该目录将是一个具有不可读 GUID 名称的大目录,但您可以 cd 进入其中的几个并查看哪个有您的 .app。
更容易:只需从模拟器中删除您的应用程序(与您从 iPhone/Pad 中删除的方式相同:按住图标然后单击 X),它将带上文档。