Если ключи являются NSNumbers, и вы знаете, что они последовательные, и вы хотите удалить более низкие значения, то:
int limit=20; //set to whatever you want
int excess = limit - [dict count];
if (excess > 0) {
for (int i = 1; i <= excess; i++) {
[dict removeObjectForKey:[NSNumber numberWithInt:i]];
}
}
Если ваши ключи - строки NSString, просто создайте строку NSString в соответствующем формате.
Если ваши ключи не последовательные, то вам понадобится либо параллельный словарь с датой хранения для каждой записи, чтобы вы знали, когда каждая запись была сохранена, и вы можете удалить самую старую, либо вам нужно использовать что-то еще полностью (если вы храните последовательные целые числа в качестве ключей, не будет ли проще использовать NSMutableArray?)