0

我对实现 NSObject 模型的正确方法有点困惑。我正在创建一个Book将记录一些数据(NSString、UIImage 等)的类,但我将数据存储在服务器上。Book当我创建一个这样-(void)loadDataFromServerWithID:(NSString *)bookID的时,我应该创建一个类似的方法Book

Book *book = [Book alloc] init];
[book loadDataFromServerWithID:@"1234"];

并在 loadDataFromServer 方法中下载 JSON 数据并将实例变量分配给对象?

我一直在想很多方法可以做到这一点,但我不确定无论如何是有效/聪明的方法。

谢谢你的帮助。

4

2 回答 2

1

您如何处理从服务器检索数据?您应该始终在您的应用程序中进行异步调用,以免阻塞 UI。我鼓励您尝试AFNetworking。如果您的服务器发回 JSON,它将直接转换为 NSDictionary。

我喜欢在我的模型中有一个如下所示的 init 方法:

- (id)initWithDictionary:(NSDictionary *)dictionary
{
    self = [super init];

    if (self) {
        self.title = [dictionary objectForKey:@"title"];
        self.nbOfPages = [dictionary objectForKey:@"nbOfPages"];
        // etc.
    }

    return self;
}

其中参数是解析 JSON 后获得的字典。

Ben Scheirman制作了一个关于 AFNetworking 的截屏视频,他在其中准确解释了如何实现这一点,您应该查看一下

于 2012-06-15T21:02:00.730 回答
1

一种方法是只让 1 个类负责与服务器通信,然后在类中有一个名为类似bookFromServerWithID:返回的新书对象的方法。其他变体包括某种形式的回调以避免阻塞主线程。

要进行异步加载,您将创建一个类似于[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]并且可能会在加载器中的某处调用上述方法的方法。在回调中,您将解析来自连接的数据并将回调提供给您的方法Book对象。

如果您以前没有使用过队列,并发编程指南是一本很有帮助的读物(如果有点长且深入的话)。

于 2012-06-15T20:32:39.427 回答