【原】使用Bmob作为iOS后台开发心得——查询关联关系(BmobRelation)
本文转载请注明出处 —— polobymulberry-博客园
简介
Bmob中的数据关联分为Pointer和Relation两种(数据关联在我开发app过程中使用还是很频繁的,也算个难点。虽然之前没有学过数据库,但是觉得还是有必要熟悉和掌握它),对此,Bmob官方文档已经介绍得很详细了。
基本上查看文档就可以解决大部分数据关联的问题(Bmob的文档真心要赞一下)。这里我记录下当时我最难理解的一个部分——查询关联关系。
还是使用官方文档的事例来学习(这一处官网有些地方的objectId书写错了,记录下时间2015-09-14)。
Post表(所有用户发表的文章都放在Post表中content指文章内容,title指文章标题,author是Pointer类型,指向_User表)

_User表(username表示用户名,password表示用户密码)

举例
我们的任务是查询(喜欢Post表中objectId为a397e97451这篇文章的所有用户,简单说就是查找objectId为a397e97451文章中likes中关联(Relation)的所有User)。
//关联对象表
BmobQuery *bquery = [BmobQuery queryWithClassName:@"_User"]; //需要查询的列
BmobObject *post = [BmobObject objectWithoutDatatWithClassName:@"Post" objectId:@"a397e97451"];
[bquery whereObjectKey:@"likes" relatedTo:post]; [bquery findObjectsInBackgroundWithBlock:^(NSArray *array, NSError *error) {
if (error) {
NSLog(@"%@",error);
} else {
for (BmobObject *user in array) {
NSLog(@"%@",[user objectForKey:@"username"]);
}
}
}];
以上时官网给出的查询代码。但是我一开始实在无法理解这种查询方式,bquery明显和“likes”和post不是一条路上的。直到我看到了下面这句话:
跟Pointer不同的是,此处Relation查询的本质是_User表。
所以上面代码实际上做的是什么工作了?
1.因为我们要找的是所有喜欢这篇文章的User,所以我们先在_User表中查找所有User。
2.但是我们上一步所找到的User很多不喜欢这篇文章,所以得有一个筛选方法。而这个筛选方式就是whereObjectKey:relatedTo:,relatedTo指向的就是我要查询的那篇文章,而whereObjectKey指向的就是该文章对应的User关联关系。至于为什么要加whereObjectKey,是因为Post表中可能有多个关联User的关系,比如后期可能加入所以点评该文章的用户(关联User的关系)。我们可以这样理解,上一步的bquery中存放着_User表中所有User,而Post的likes中存放的是喜欢该文章User的objectId(或指针之类的统一标识)。然后遍历所有User,找到对应objectId相等的User,存取下来,作为查找结果。(以上纯属猜测!!!)
NSMutableArray *searchResult = 初始化;
for(BmobUser *user in _User表中所有User)
{
if (user.objectId 等于post的likes中某个objectId )
{
[searchResult addUser:user];
}
}
return searchResult; // 存放了所要查询的User
总结

【原】使用Bmob作为iOS后台开发心得——查询关联关系(BmobRelation)的更多相关文章
- 【原】使用Bmob作为iOS后台开发心得——云端代码添加其他User的Relation关系
本文转载请注明出处 —— polobymulberry-博客园 问题描述 我在User表中增加了两个列,分别为“我关注的人”(Relation关系)和“我的粉丝”(Relation关系)当我关注某个人 ...
- IOS开发之----详解在IOS后台执行
文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以,1.音乐2.location 3.voip 文二 ...
- 安卓版App开发心得
从2016年4月到6月主要做的工作是网站的开发,而6月到现在2016年8月初,主要做的工作是Android和IOS两种App的开发,又以Android为主. 将这段时间的Android开发心得记录如下 ...
- ios新手开发——toast提示和旋转图片加载框
不知不觉自学ios已经四个月了,从OC语法到app开发,过程虽然枯燥无味,但是结果还是挺有成就感的,在此分享我的ios开发之路中的小小心得~废话不多说,先上我们今天要实现的效果图: 有过一点做APP经 ...
- iOS多线程开发
概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操 ...
- iOS企业级开发初级课程-表视图(13集)
首先了解了表视图的组成.表视图类的构成.表视图的分类以及表视图的两个重要协议(委托协议和数据源协议),对表视图有了一个整体上的认识.接下来我们掌握了如何实现简单表视图和分节表视图,以及表视图中索引.搜 ...
- iOS界面开发
[转载] iOS界面开发 发布于:2014-07-29 11:49阅读数:13399 iOS 8 和 OS X 10.10 中一个被强调了多次的主题就是大一统,Apple 希望通过 Hand-off ...
- iOS移动开发周报-第25期
iOS移动开发周报-第25期 [摘要]:本期iOS移动开发周报带来如下内容:苹果发布 iPhone6 和 Apple Watch.Swift 1.0 GM发布.Xcode 6支持PDF Vector作 ...
- iOS移动开发周报-第24期
iOS移动开发周报-第24期 [摘要]:本期iOS移动开发周报带来如下内容:苹果更新了iTunes Connect的设计.UIKit Dynamics 教程:抛掷 Views.iOS APP 架构漫谈 ...
随机推荐
- RPC 使用中的一些注意点
最近线上碰到一点小问题,分析其原因发现是出在对 RPC 使用上的一些细节掌握不够清晰导致.很多时候我们做业务开发会把 RPC 当作黑盒机制来使用,但若不对黑盒的工作原理有个基本掌握,也容易犯一些误用的 ...
- 深入理解 Java G1 垃圾收集器--转
原文地址:http://blog.jobbole.com/109170/?utm_source=hao.jobbole.com&utm_medium=relatedArticle 本文首先简单 ...
- C++的内存泄漏检测【转载】
原文地址: http://www.cnblogs.com/jily/p/6239514.html
- 升级npm
查看npm的所有版本 运行命令: npm view npm versions 命令运行后,会输出到目前为止npm的所有版本. [ '1.1.25', '1.1.70', '1.1.71', '1.2. ...
- H3 BPM让天下没有难用的流程之功能介绍
H3 BPM10.0功能地图如下: 图:H3 BPM 功能地图 一.流程引擎 H3 BPM 流程引擎遵循WFMC 标准的工作流引擎技术,设计可运行的流程和表单,实现工作任务在人与人.人与系统.系统 ...
- TFS 2015 敏捷开发实践 – 看板的使用
看板在现代应用开发过程中使用非常广泛,不管是使用传统的瀑布式开发还是敏捷开发,都可以使用看板管理.因为看板拥有简单的管理方法,直观的显示方式,所以很多软件开发团队选择使用看板进行软件开发管理.本文不在 ...
- #ifndef
关于c的#ifndef条件编译: 1)最好把头文件的内容都放在#ifndef和#endif中 2)一般格式: #ifndef <标识> #define <标识> ...... ...
- 关于HTML语义化的一些理解
语义化这个词我想大家都看到了无数次,特别是在一些招聘广告上. 其实我自己也是,不过每次看到都觉得是那些招聘公司复制的,其实他们根本说不清语义化是什么,而且也根本不看重. 所以我一直也没把这东西当回事过 ...
- 【腾讯Bugly干货分享】Android进程保活招式大全
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ac4a0ea374c75371c08ce8 作者:腾讯——张兴华 目前市面上 ...
- 深入解析js异步编程利器Generator
我们在编写Nodejs程序时,经常会用到回调函数,在一个操作执行完成之后对返回的数据进行处理,我简单的理解它为异步编程. 如果操作很多,那么回调的嵌套就会必不可少,那么如果操作非常多,那么回调的嵌套就 ...