[[array1 objectForKey:@"created"] objectForKey:@"sec"]
возвращает указатель на объект; в вашем случае объект NSNumber
. Когда вы разыгрываете его на int
как:
(int)[[array1 objectForKey:@"created"] objectForKey:@"sec"]
вы приводите адрес памяти, где расположен этот объект, к значению int
, поскольку -objectForKey:
возвращает указатель на объект.
Поскольку вас интересует не адрес памяти, а базовое значение int
, используйте -[NSNumber intValue]
:
int v1 = [[[array1 objectForKey:@"created"] objectForKey:@"sec"] intValue];
Также странно, что вы назвали свои словари array1
и array2
- они не являются массивами.
Редактировать: В качестве альтернативы, вы можете позволить NSNumber
сделать сравнение для вас:
NSInteger Sort_Created_Comparer(NSDictionary *d1, NSDictionary *d2, void *context)
{
NSNumber *n1 = [[d1 objectForKey:@"created"] objectForKey:@"sec"];
NSNumber *n2 = [[d2 objectForKey:@"created"] objectForKey:@"sec"];
return [n1 compare:n2];
}