首页 文章

谓词核心数据关系中的对象

提问于
浏览
0

我最近问了一个类似的问题,但是他被引导到另一个解决方案,但现在我发现我确实需要在另一个领域 . 我的应用程序跟踪参加锦标赛的玩家 . 每个玩家都会签到,然后将他们的比赛添加到数据库中 . 每个玩家可以在多天内办理登机手续,因此有一对多的关系 . 每场比赛可以有两名球员,球员可以有多场比赛,所以球员和比赛是很多关系 .

我有三个实体:Player,CheckIn和Match

玩家实体< - >> CheckIn实体玩家实体<< - >>匹配实体

Player.h:

@class CheckIn, Match;
@interface Player : NSManagedObject

@property (nonatomic, retain) NSDate * birthDay;
@property (nonatomic, retain) NSString * email;
@property (nonatomic, retain) NSString * firstName;
@property (nonatomic, retain) NSString * lastName;
@property (nonatomic, retain) NSString * playerID;
@property (nonatomic, retain) NSString * playerImage;
@property (nonatomic, retain) NSString * playerImageSmall;
@property (nonatomic, retain) NSDate * timeOfLastCheckIn;
@property (nonatomic, retain) NSNumber * isCheckedIn;
@property (nonatomic, retain) NSOrderedSet *playerCheckIns;
@property (nonatomic, retain) NSSet *playerMatches;
@end

@interface Player (CoreDataGeneratedAccessors)

- (void)insertObject:(CheckIn *)value inPlayerCheckInsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromPlayerCheckInsAtIndex:(NSUInteger)idx;
- (void)insertPlayerCheckIns:(NSArray *)value atIndexes:(NSIndexSet *)indexes;
- (void)removePlayerCheckInsAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectInPlayerCheckInsAtIndex:(NSUInteger)idx withObject:(CheckIn *)value;
- (void)replacePlayerCheckInsAtIndexes:(NSIndexSet *)indexes withPlayerCheckIns:(NSArray *)values;
- (void)addPlayerCheckInsObject:(CheckIn *)value;
- (void)removePlayerCheckInsObject:(CheckIn *)value;
- (void)addPlayerCheckIns:(NSOrderedSet *)values;
- (void)removePlayerCheckIns:(NSOrderedSet *)values;
- (void)addPlayerMatchesObject:(Match *)value;
- (void)removePlayerMatchesObject:(Match *)value;
- (void)addPlayerMatches:(NSSet *)values;
- (void)removePlayerMatches:(NSSet *)values;
@end

CheckIn.h:

@class Player;

@interface CheckIn : NSManagedObject
@property (nonatomic, retain) NSNumber * challengeBadge;
@property (nonatomic, retain) NSDate * checkInTime;
@property (nonatomic, retain) NSString * player;    //convenience string with player's full name
@property (nonatomic, retain) NSNumber * spiritBadge;
@property (nonatomic, retain) NSNumber * stampsBadge;
@property (nonatomic, retain) NSNumber * triviaBadge;
@property (nonatomic, retain) Player *checkedInPlayer;
@end

Match.h

@class Player;

@interface Match : NSManagedObject
@property (nonatomic, retain) NSString * playerOne; //convenience string with player's full name
@property (nonatomic, retain) NSString * playerTwo; //convenience string with player's full name
@property (nonatomic, retain) NSDate * time;
@property (nonatomic, retain) NSString * winner; //convenience string with player's full name
@property (nonatomic, retain) NSOrderedSet *matchPlayers;
@end

@interface Match (CoreDataGeneratedAccessors)

- (void)insertObject:(Player *)value inMatchPlayersAtIndex:(NSUInteger)idx;
- (void)removeObjectFromMatchPlayersAtIndex:(NSUInteger)idx;
- (void)insertMatchPlayers:(NSArray *)value atIndexes:(NSIndexSet *)indexes;
- (void)removeMatchPlayersAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectInMatchPlayersAtIndex:(NSUInteger)idx withObject:(Player *)value;
- (void)replaceMatchPlayersAtIndexes:(NSIndexSet *)indexes withMatchPlayers:(NSArray *)values;
- (void)addMatchPlayersObject:(Player *)value;
- (void)removeMatchPlayersObject:(Player *)value;
- (void)addMatchPlayers:(NSOrderedSet *)values;
- (void)removeMatchPlayers:(NSOrderedSet *)values;
@end

我的模型的Player实体具有以下关系:playerCheckIns to CheckIn with inverse checkedInPlayers playerMatches与inverse matchPlayers匹配(这是有序的,最多为2)

锦标赛管理员用户将使用tableview查看所有玩家 . 对于每个玩家,他们需要查看玩家所在的比赛列表以及玩家所拥有的签到列表 . 我想为每个可以分别应用于CheckIn tableview和Match tableview的谓词使用谓词 . 这是不相关的,但我使用SWTableViewCell将实用程序按钮放在我的自定义tableviewcells中,并设置手动segue来处理导航 . 匹配和签入视图控制器每个都定义了一个NSPredicate *谓词来处理入站谓词 .

当管理员用户在播放器单元格中选择匹配实用程序按钮时,我想加载我的匹配表视图,传递一个谓词,该谓词将过滤视图以仅显示所选玩家所涉及的匹配项 . 这将存在于我的prepareforsegue方法中,以获取适当的segue标识符 .

这是我现在在我的播放器tableview的prepareforsegue方法中匹配的内容:

Player *currentPlayer = [self.fetchedResultsController objectAtIndexPath:[self.tableView indexPathForSelectedRow]];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SUBQUERY(match, $m, ANY $m.matchPlayers == %@).@count > 0", currentPlayer];
NSLog(@"Setting predicate: %@",pred);
filteredMatchVC.predicate = pred;

我的NSLog显示谓词设置为:

SUBQUERY(match, $m, ANY $m.matchPlayers == nil).@count > 0

因此,谓词中没有捕获currentPlayer对象 .

过滤到过滤的签入视图会是类似的,但由于此错误,我还没有尝试过...

任何帮助是极大的赞赏!

1 回答

  • 0

    使用按钮的单元格对象作为segue的发送者...

相关问题