0

我从斯坦福 ios 课程下载了这个应用程序,我有自己的 flickr api 密钥,并将其放在 FlickrAPIKey.h 中,但它仍然给我一个空的摄影师 tableView。我不确定它是否相关,但我收到了这些日志消息:

2012-03-11 09:18:46.848 Photomania[23748:1e03] NSFileCoordinator:一个令人惊讶的服务器错误信号。详细信息:连接无效

4

3 回答 3

2

我发现了问题。如果其他人遇到这个问题,这里是解决方案(在我的情况下):如果文件尚未创建,应用程序只会下载数据,所以我第一次运行它时,我还没有放 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];
    }
}

第一次之后,您可以删除该行。我希望有人能从我的错误中吸取教训。

于 2012-03-12T18:17:15.970 回答
1

@litov 是的,您确实可以这样做,尽管在这种情况下,我发现从 iPhone/iPad 或模拟器中删除应用程序要容易得多;然后数据库文件也将被删除。

于 2012-07-12T13:58:53.723 回答
0

Litov,看起来您的解决方案每次都会再次获取数据。我猜你没有得到任何重复,因为我认为 fetchFlickrData... 的实现是通过唯一 id 检查现有记录,并且只加载那些尚未加载的记录。

尽管如此,每次启动应用程序时它都会从 Flickr 获取数据,这很慢。

但是,由于您知道问题在于您没有为第一次运行正确设置,因此您可以在没有此 hack 的情况下解决该问题:我在基于此演示的项目中遇到了类似的问题,我通过删除数据库文件解决了它从模拟器。

您可以通过进入 ~/Library/Application Support/iPhone Simulator/5.1/Applications/ 并在数据库上执行“rm -fr”在文件系统中执行此操作(它将是一个具有您给它的名称的目录。请注意该路径中的“5.1”取决于您正在运行的模拟器的版本,并且该目录将是一个具有不可读 GUID 名称的大目录,但您可以 cd 进入其中的几个并查看哪个有您的 .app。

更容易:只需从模拟器中删除您的应用程序(与您从 iPhone/Pad 中删除的方式相同:按住图标然后单击 X),它将带上文档。

于 2012-09-28T19:05:40.580 回答