所以我有两个核心数据实体 - $table = 'paroles';
$array = array(
'timestamp' => 'VALEUR',
'cle' => 'VALEUR',
'titre' => 'VALEUR',
'paroles' => 'VALEUR',
'titre_trad' => 'VALEUR',
'paroles_trad' => 'VALEUR'
);
$values = '';$datas = '';
foreach ($array as $key => $value) {
$values = $values.$key.',';
$datas = $datas.':'.$key.',';
}
$values = trim($values, ',');
$datas = trim($datas, ',');
$requestconstr = 'INSERT INTO '.$table.'('.$values.') VALUES('.$datas.')';
$sth = $this->_db->prepare($requestconstr);
foreach ($array as $key => $value) {
$sth->bindValue(':'.$key, $value);
}
if($sth->execute()){
return true;
}else return false;
// PDOStatement Object ( [queryString] => INSERT INTO paroles(timestamp,cle,titre,paroles,titre_trad,paroles_trad) VALUES(:timestamp,:cle,:titre,:paroles,:titre_trad,:paroles_trad) )
和PersonObj
。
每个帐户都有多个人。每个人都可以有多个签到,每个签到都有一个时间戳。
CheckInObj
目标是按最近一次检查对所有人进行排序。
PersonObj {
NSSet * checkIns;
}
CheckInObj {
NSDate *timestamp
}
这给了我最近一次办理登机手续。
我现在可以继续排序有一个临时缓存,其中包含我发现的最新签到数据与相应的人,并使用它来对每个人进行排序,最后有一个排序的人员列表。
问题是:
我能以某种方式直接在Person的对象上运行吗?
NSSortDescriptor *nameDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:YES];
NSArray *sortedCheckins = [person.checkIns sortedArrayUsingDescriptors:@[nameDescriptor]];
CheckInObject *mostRecentCheckin = [sortedMessages lastObject];
而不是
NSArray *persons = [account.persons allObjects];
我可以构建一个真棒排序描述符,可以为我做这个吗?
我试过了。
for (Person *person in persons) {
// find most recent checkin, save temp cache, and resort each time we see a new person in the loop
}
但它不会比较它,因为它是一个NSSet。
有什么想法?
答案 0 :(得分:2)
你不能这样做,因为你需要一个聚合。 I. e。如果您想获得第一次或最后一次办理登机手续,则不会向人员报告checkIns.timestamp
。 (或平均值或其他。)除此之外-sortDescriptorWithKey
需要一个键,而不是一个关键路径。
但是,通常您可以使用Person
lastCheckIn
的计算属性来解决此问题。这取决于您的具体情况,但您可以在每次更改checkIns
数组时(通过单个比较)重新计算该属性,或者根据需要计算它,如果有人试图检索它。