-1

の配列がありUILocalNotificationます。各通知には、であるuserInfoプロパティがありNSDictionaryます。userInfoでキーを設定し@"ID"、値は一意のIDです。

したがって、私がやりたいのは、userInfoプロパティ@"test"にkeyの値がある場合は通知の配列をチェックし、そうでない場合@"ID"は返すことです。forループを使用してこれを実現する方法は知っていますが、もっとエレガントな方法があるのではないかと思います。YESNO

4

2 に答える 2

2

-[NSArray indexesOfObjectsPassingTest:]一致するオブジェクトに対してYESを返すブロックを取り、それ以外の場合はNOを返すwhichを使用できます。

NSArray *array = ...;
NSIndexSet *matchingIndexes = [array indexesOfObjectsPassingTest:^BOOL(UILocalNotification *notification, NSUInteger idx, BOOL *stop) {
    return [notification.userInfo[@"ID"] isEqualToString:@"test"];
}];
return [matchingIndexes count] != 0;
于 2013-01-08T18:59:00.207 に答える
2

基本的な高速列挙よりもパフォーマンスの面ではるかに優れている可能性は低いと思います-おそらく「オプションで列挙」メソッドの1つを使用して、並行性を許可します-しかし、あなたが何を書くかについては確かにもっとエレガントな方法があります再しようとしています:

[[array valueForKeyPath:@"userInfo.ID"] containsObject:@"test"];
于 2013-01-08T20:21:52.727 に答える