【问题标题】:Delaying an -(id)init instance; is it possible?延迟 -(id)init 实例;可能吗?
【发布时间】:2011-11-19 12:50:37
【问题描述】:

我一直在尝试从 NSURL 中获取 PDF,该文件在

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

NSURL 中的更改完美记录,但视图在应用程序有机会对该更改采取行动之前加载。有没有办法通过简单地将代码移动到

viewDidLoad

部分,还是我必须彻底改变一切?这是我的 -(id)init 方法:

- (id)init {
if (self = [super init]) {
    CFURLRef pdfURL = (CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:appDelegate.baseURL ofType:@"pdf"]];
    pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
}
return self;

}

【问题讨论】:

  • 如果您需要更改您的问题,只需对其进行编辑:) 如果您向撰写您收到的答案的人发表评论以让他们知道,这将很有帮助。如果你发现你有一个完全不同的问题要解决,那就问一个新问题。您可以在新问题中引用这一点并指出它有何不同。
  • 我已将此问题标记为管理员删除。无论如何,谢谢蒂姆,我会记住这一点的。
  • 是的,我知道 .. 我是收到您的标志的版主。 (用户名旁边的 ♦ 表示用户是版主)

标签: objective-c ios cocoa-touch ipad nsurl


【解决方案1】:

当您需要使用网络时,经过验证的方法是使用异步调用。这是因为网络连接的性质;它是不可预测的,并不总是可靠的,您从服务器获取结果所需花费的时间可能从毫秒到几分钟不等。

我会使用异步方法创建一个数据模型类 MyPDFModel,它应该运行一个线程来从服务器获取文件:

- (void)requestPDFWithURL:(NSURL*)fileURL
{
    [NSThread detachNewThreadSelector:@selector(requestPDFWithURLThreaded:) toTarget:self fileURL];
}

- (void)requestPDFWithURLThreaded:(NSURL*)fileURL
{
    NSAutoreleasePool* pool = [NSAutoreleasePool new];
    // do whatever you need to get either the file or an error
    if (isTheFileValid)
        [_delegate performSelectorOnMainThread:@selector(requestDidGetPDF:) withObject:PDFFile waitUntilDone:NO];
    else
        [_delegate performSelectorOnMainThread:@selector(requestDidFailWithError:) withObject:error waitUntilDone:NO];

    [pool release];
}

同时 UI 应该显示一个活动指示器。

MyPDFModelDelegate 协议应该有两种方法:

- (void)requestDidGetPDF:(YourPDFWrapperClass*)PDFDocument;
- (void)requestDidFailWithError:(NSError*)error;

YourPDFWrapperClass 用于返回一个自动发布的文档。

委托可以让 UI 知道数据已更新,例如,如果委托是数据模型的一部分,则通过发布通知。

这只是一个示例,实现方式可能会根据您的需要而有所不同,但我想您会明白的。

附:延迟初始化是一个非常糟糕的主意。

【讨论】:

  • 感谢您的帖子...但我没有使用服务器,也不希望达到我的新手级别。所有资源都是本地的,所以我的问题是初始化时间。
  • 不客气。文件是否在本地存储的服务器上并不重要。如果您在计时方面遇到问题,则无论延迟原因如何,异步方法都适用。
  • 戴维德,你是救生员!小心这个东西,这将是我的第一个应用程序!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
相关资源
最近更新 更多