- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 mysql 和 php 中有一个跟随系统,它只使用一个表如下:
关注
id|userid|followerid
(还有一个users表:id|username|pass)
每当一个用户关注另一个用户时,就会在关注栏中输入 followerid,在 userid 栏中输入被关注的人。
我现在正尝试使用网络服务从 iOS 应用访问它。
对于 VC,我希望能够列出用户,但是通过在用户的关注者和用户关注的人之间切换 NSPredicate 来实现。这是微不足道的使用 php/sql,但我有时间转换为 CoreData。
现在我在核心数据中有具有以下属性的用户实体:
id|用户名|密码
并复制 mysql 模式,我还有一个 Following entityfid|fuserid|fflowerid
反过来,我为用户与关注者创建了一对多关系,并为用户与关注者创建了反向一对多关系,因为给定用户(例如应用程序的用户)可以有很多关注者,也可以关注很多人人。
Web 服务当前设置为用户提供,并为每个用户提供一组关注者 ID,如下所示编号:1姓名:鲍勃追随者:2,3,4
此时我很困惑。我可以填充用户实体。我还可以用所有关注用户的人和用户正在关注的所有人填充关注者实体。
但是,我不知道要与核心数据通信哪些关注者与哪个用户相关,而且我也不知道如何编写谓词,例如,只拉取应用程序用户的关注者。
如有任何建议,我们将不胜感激。
现在我的 NSManagedObjects 看起来像下面这样:
//User.h
#import "Following.h"
@class Following;
@interface User : NSManagedObject
//in user entity
@property (nonatomic, retain) NSNumber * uid;
@property (nonatomic, retain) NSString * uname;
@property (nonatomic, retain) NSString *upass;
//this is relationship
@property (nonatomic, retain) Following *following;
@end
//and Following.h
#import "User.h"
@class User;
@interface Following : NSManagedObject
@property (nonatomic, retain) NSNumber * fid;
@property (nonatomic, retain) NSNumber * fuserid;
@property (nonatomic, retain) NSNumber * followerid;
//this is relationship
@property (nonatomic) User *user;
@end
从 web 服务导入和保存用户后,我尝试在 Following 实体中保存一些关于关注者的信息,但不确定我在这里做什么....
NSSet*followerids = importUser.followerids;
NSInteger *folnum =[followerids count];
if (folnum>0) {
for (id item in followerids) {
Following *newFollowing = [NSEntityDescription insertNewObjectForEntityForName:@"Following" inManagedObjectContext:self.managedObjectContext];
newFollowing.fuserid = useridnum;
NSNumber *itemnum = [NSNumber numberWithInt:[item intValue]];
newFollowing.followerid = itemnum;
newFollowing.user = record; //where record is a user just created
}
最佳答案
您实际上拥有多对多关系(每个 User
可以关注许多其他 User
,并且可以被许多 User
关注)。您可以直接在 CoreData 中对此进行建模,而无需创建额外的实体,方法是拥有两个对多关系,followedByUsers
和 usersBeingFollowed
,其中一个是另一个的倒数。生成的模型如下所示:
您的 User
类定义将如下所示:
@interface User : NSManagedObject
//in user entity
@property (nonatomic, retain) NSNumber *uid;
@property (nonatomic, retain) NSString *uname;
@property (nonatomic, retain) NSString *upass;
//this is relationship
@property (nonatomic, retain) NSSet *followedByUsers;
@property (nonatomic, retain) NSSet *usersBeingFollowed;
@end
如果您的 Web 服务提供了一个 userid
、name
和一组 followerids
,我会首先创建所有的 Users
,在不设置任何关系的情况下,然后通过获取与 followerids
对应的 User
记录来循环并建立关系:
NSPredicate *userPredicate = [NSPredicate predicateWithFormat:@"uid == %@",importUser.userid];
NSFetchRequest *fetchUser = [NSFetchRequest fetchRequestWithEntityName:@"User"];
fetchUser.predicate = userPredicate;
NSArray *results = [context executeFetchRequest:fetchUser error:nil];
User *record = results[0];
NSSet *followerids = importUser.followerids;
NSInteger folnum =[followerids count];
if (folnum>0) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"uid IN %@",followerids];
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"User"];
fetch.predicate = predicate;
NSArray *resultsArray = [context executeFetchRequest:fetch error:nil];
if ([results count] > 0) {
NSSet *followers = [NSSet setWithArray:resultsArray];
record.followedByUsers = followers;
}
}
(为简单起见,我省略了通常的错误检查。)建立关系后,您可以确定哪些用户关注给定用户:
givenUser.followedByUsers
或者如果您想使用谓词(例如,对于 fetchedResultsController),请使用:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"usersBeingFollowed CONTAINS %@",givenUser];
相反,要获取 givenUser
正在关注的用户,请使用
givenUser.usersBeingFollowed
或
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"followedByUsers CONTAINS %@",givenUser];
关于iOS:跟随系统的核心数据模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36438703/
我试图在我的数据库中找到所有关注该用户的用户。 followers 集合有 3 个字段:_id、_t、_f。 当一个用户关注另一个用户时,它会将他们的用户 ID 添加到 _f 并将目标用户的 ID 添
我有一个 UICollectionView,它由单元格中的 UIImagePickerControl 按钮填充,我希望跟随 Collection View 末尾的单元格通过屏幕,但仍允许用户滚动 -
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 个月前。 Improv
好的,所以我知道如何将文本剪裁成特定的几何形状,但是文本不会根据剪裁自动换行,那么如果您有“勾选”作为几何/路径? 是否需要手动添加适合每一行的文本框,然后根据适合/不适合的内容拆分文本? 最佳答案
我里面有链接 s,但我在所有 上也有一个点击事件s。代码如下所示: $( document ).ready( function() { $( 'td.event' ).click( func
短版: 是)我有的: 2 元组列表,例如 [("a", "b"), ("b", "c"), ("d", "e"), ("c", "d"), ("f", "g")]不一定按字母顺序排列 我想要的是: 给
我正在尝试使用 xpath 来获取表的内容。 表格看起来像这样 Stuff Contents Contents Stuff
我有几个像这样的div: My Link 问题是,如果用户单击 div 而不是文本,则链接不会触发。这是我到目前为止所拥有的: $('#TopMenuBar .MenuList').click
我想要做一个链接到这个 .after() 的 .fadeIn() 动画,但这似乎不是这样做的方法。有什么建议吗? $(clicked_item).parent().parent().parent().
int getIdForSong(Song song){ String selectQuery = "SELECT id FROM " + TABLE_SONG + " WHERE " + S
现在右侧的 div 一直跟随滚动。如果我想让它在页面滚动到div的顶部时开始跟随滚动,并在向上滚动时让它保持在那里,我还需要做什么? jsfiddle $(window).scroll(functio
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
我正在为我的客户设计一件 T 恤,我使用 html5 Canvas 制作了它。衬衫设计师现在已经完成,但他要求我添加一个放大镜(类似这样的东西:http://mlens.musings.it/)。我在
我正在尝试调试远程主机上的 fork 进程,但每次都让 gdbserver 进程在子退出时结束。 尝试在 .gdbinit 中设置“set follow-fork-mode child”,没有帮助。
我正在制作一个带有滚动控件的响应式菜单。我有一个小问题,我的渐变和控件跟随,滚动时,你可以在我的 JSFiddle 中看到它. 我的菜单控件有我的 CSS #page .page-nav .contr
我将我的页面分为左右两部分。我用 div 来制作左导航和右导航。在右侧导航中,我也有多个 div。现在,当我向下滚动页面时,只有页面的右侧部分正在滚动,而左侧导航则停留在那里。 所以当我向下滚动页面时
我刚刚开始使用 svg 和 anime.js。我正在尝试重新创建 svg motion path在文档中找到我自己的 Assets 。不过,我没有使用 div 来跟随路径,而是使用了另一条路径。 我有
我将展示整个代码,但请注意指针上方的引号,因为我将在那里讨论我的问题。我会在引用评论中告诉你我认为那里发生了什么。代码编译并运行,我只需要帮助理解部分代码。 #include #include i
我在左侧有一个 div,其中包括营业时间和天气。我希望该 div 根据用户的滚动方式向下和向上滚动。所以它会跟随页面上下移动。我将如何尝试呢?这是我的网站judystropicalgarden.com
所以我遇到了这个小问题,我的相机错误地固定在播放器上。 左上角的蓝色 Sprite 是玩家,但它应该位于屏幕中央。关于这个问题的所有其他线程都使用固定渲染管道,而我使用基于 VBO 的线程。 我的矩阵
我是一名优秀的程序员,十分优秀!