У меня есть NSDictionary со следующими данными:Заказать NSArray с объектами
(lldb) po allFriends
{
71685207018702188 = {
id = 71685207018702188;
name = "mikeziri ";
username = mi;
};
93374822540641772 = {
id = 93374822540641772;
name = "Alan Weclipse";
username = zuka;
};
96553685978449395 = {
id = 96553685978449395;
name = "Monica Weclipse";
username = amonica;
};
96556113096345076 = {
id = 96556113096345076;
name = Xavier;
username = branko;
};
97017008427632119 = {
id = 97017008427632119;
name = "Dario Weclipse";
username = tarzan;
};
}
Я сортировки этих объектов на основе имени, если они не имеют имя, я будет использовать имя пользователя . Чтобы сделать это, я создать новый NSDictionary с именем и идентификатором и в конце метода я отсортировать их по имени . Код сортировать их заключается в следующем:
- (NSArray*)orderFriends
{
NSMutableDictionary* newFriendsDict = [[NSMutableDictionary alloc] init];
for (int i=0; i<[allFriends count];i++)
{
NSMutableDictionary* friendsDict = [[NSMutableDictionary alloc] init];
NSDictionary* friend = [allFriends objectForKey:[NSString stringWithFormat:@"%@", [sortedKeysFriends objectAtIndex:i]]];
if ([[friend objectForKey:@"name"] length] != 0)
{
[friendsDict setObject:[friend objectForKey:@"id"] forKey:@"id"];
[friendsDict setObject:[NSString stringWithFormat:@"%@", [friend objectForKey:@"name"]] forKey:@"name"];
}
else
{
[friendsDict setObject:[friend objectForKey:@"id"] forKey:@"id"];
[friendsDict setObject:[NSString stringWithFormat:@"%@", [friend objectForKey:@"username"]] forKey:@"name"];
}
[newFriendsDict setObject:friendsDict forKey:[NSNumber numberWithInt:i]];
}
NSArray* sp = nil;
sp = [[newFriendsDict allValues] sortedArrayUsingComparator:^(id obj1, id obj2){
NSString *one = [NSString stringWithFormat:@"%@", [obj1 objectForKey:@"name"]];
NSString *two = [NSString stringWithFormat:@"%@", [obj2 objectForKey:@"name"]];
return [one compare:two];
}];
return sp;
}
Проблема заключается в том, что конечный результат не так:
(lldb) po sp
<__NSArrayI 0x160491a0>(
{
id = 93374822540641772;
name = "Alan Weclipse";
},
{
id = 97017008427632119;
name = "Dario Weclipse";
},
{
id = 96553685978449395;
name = "Monica Weclipse";
},
{
id = 96556113096345076;
name = Xavier;
},
{
id = 71685207018702188;
name = "mikeziri ";
},
)
Каждый раз, когда вы используете конструкцию 'stringWithFormat: @"% @ ", вы делаете ошибку. Это абсолютно ничего, кроме потери памяти и процессорного времени. Не делай этого. Просто используйте исходную строку, не используя stringWithFormat, который просто создает ненужный дубликат строки очень интенсивным образом. –