- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从磁盘读取本地 JSON 文件(大约 5,000 多个记录/对象),并且我有此代码并正在尝试使用 Realm
我想在完成加载和解析后更新我的用户界面;我已经尝试了一些变体,但我现在拥有的这个变体似乎有点矫枉过正。
NSURL *url = [[NSBundle mainBundle] URLForResource:fightersFilename withExtension:fightersFileExtension];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:30.0];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if (!error && data) {
//call a delegate to send the data to your page from where it was called
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
NSError *error=nil;
NSMutableArray *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
dispatch_async(dispatch_get_main_queue(), ^{
if (!error) {
// Get realm and table instances for this thread
RLMRealm *realm = [RLMRealm defaultRealm]; // Create realm pointing to default file
[realm beginWriteTransaction];
for (NSDictionary *fighterDict in result) {
DDLogVerbose(@"%@ %@", fighterDict[@"name"], fighterDict[@"filename"]);
Fighter *f = [[Fighter alloc] init];
f.name = fighterDict[@"name"];
f.filename = fighterDict[@"filename"];
[realm addObject:f];
}
// Commit the write transaction
// to make this data available to other threads
[realm commitWriteTransaction];
DDLogVerbose(@"%d fighters in realm", [[Fighter allObjects] count]);
}
});
});
} else {
//show alert that an error has occurred during downloading data from net.
NSLog(@"JSON read error: %@", error);
}
}];
queue=nil;
我的想法是,我想读取 JSON 文件,解析它并将其放入对象中,然后一旦完成,更新我的 UI 或 UX。
鉴于此,上述是一个好的解决方案吗?
最佳答案
你太努力了。
在后台队列的异步调度 block 中,读取文件并同步解析它。完成后,在主队列上触发 after 函数。我将很快编辑它以添加特定代码。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL *url = [[NSBundle mainBundle] URLForResource:fightersFilename
withExtension:fightersFileExtension];
NSAssert(url!=nil, @"URL not found for target resource.");
NSData *data = [NSData dataWithContentsOfURL:url];
NSAssert(data!=nil, @"Reading data file failed.");
NSError *parseError = nil;
NSMutableArray *result = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableContainers
error:&parseError];
//TODO: Handle this sanely
NSAssert(parseError==nil, @"Parsing JSON object failed.");
dispatch_async(dispatch_get_main_queue(), ^{
[self didFinishLoadingResource:result];
});
});
关于objective-c - 使用异步 NSURLConnection 获取本地文件是否过度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26392568/
我正在开发适用于 Wordpress 的 PSD,并面临着根据颜色过度对齐背景图像或相反的问题。 在桌面上一切都很好,但在移动设备上背景图像变小了(我使用了 background-size: 100%
在标准 Modelica 流体流量源中,通常指定流量或压力。例如,以下边界设置(P 表示压力边界,F 表示流量边界)通常会围绕管道组件: P - 管道 - P F - 管道 - P 但是,有时在同一侧
我正处于设计基于 Azure 的应用程序的早期阶段。考虑到我可能预期的需求的变化性,Azure 吸引我的地方之一是它的可扩展性。因此,我试图保持事物松散耦合,以便我可以在需要时添加实例。 我看到的关于
我与 Xcode 4 dot notation code sense problem 正好相反!点符号的代码完成不仅显示属性,还显示我的方法(在每个完成的左侧标记 P 或 M 分别指示它是属性还是方法
我是一名优秀的程序员,十分优秀!