NSDictionary неправильно хранит CGRect? - PullRequest
9 голосов
/ 29 декабря 2011

Кажется, у меня проблемы с сохранением CGRect в NSDictionary.Код, который я использую:

dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Crocodile", [NSValue valueWithCGRect:CGRectMake(100,100,200,200)], nil];

Из того, что я прочитал, это должно обернуть мой CGRect в NSValue и сохранить его в словаре.

Однако, когда я попытался NSLog его, значение возвращается как {{0,0}, {0,0}}

NSLog(@"Crocodile value is: %@", NSStringFromCGRect([[dictionary objectForKey:@"Crocodile"] CGRectValue]));

Я проверил счетчик словаря и элементы, кажется, вставлены.Я не уверен, где это терпит неудачу.Я также попытался вручную разбить его, создав CGRect var, затем NSValue var, и вставив его в словарь с теми же результатами.

Любая помощь приветствуется.Спасибо

Спасибо.

Ответы [ 2 ]

19 голосов
/ 29 декабря 2011

Порядок аргументов должен быть (объект, ключ, объект, ключ,…), поэтому в вашем коде объект - @"Crocodile", а ключ - прямоугольник.

Поменяйте местами их, и это должно работать:

dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSValue valueWithCGRect:CGRectMake(100,100,200,200)], // object first…
    @"Crocodile", // …then key
    nil];

Обратите внимание, что ключи не обязательно должны быть экземплярами NSString, они могут быть любым экземпляром класса, соответствующего NSCopying.

11 голосов
/ 29 декабря 2011

Вы можете сохранить его как NSString -

        NSStringFromCGRect(<#CGRect rect#>)

А затем восстановитесь с помощью

         CGRectFromString(<#NSString *string#>)

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...