stringWithFormat Ошибка неправильного доступа

Может ли кто-нибудь объяснить, почему этот код работает отлично:

int thumbnailPrefix = trunc([newGraph.dateCreated timeIntervalSinceReferenceDate]);

newGraph.thumbnailImageName = [NSString stringWithFormat:@"%d.%@",thumbnailPrefix,@"png"];

Но этот код вызывает ошибку Bad Access?

newGraph.thumbnailImageName = [NSString stringWithFormat:@"%d.%@",trunc([newGraph.dateCreated timeIntervalSinceReferenceDate]),@"png"];

person wayne    schedule 22.08.2011    source источник


Ответы (2)


trunc возвращает double, а не int.

double trunc(double x);

Итак, в первом блоке кода вы конвертируете его в int и правильно используете спецификатор формата %d.

Во втором случае это должно быть %f или (int) перед ним.

newGraph.thumbnailImageName = [NSString stringWithFormat:@"%d.%@",(int)trunc([newGraph.dateCreated timeIntervalSinceReferenceDate]),@"png"];
person NWCoder    schedule 22.08.2011
comment
Или, точнее, %d ожидает 32-битный аргумент, а trunk возвращает 64-битный аргумент. Таким образом, %@ пытается обработать вторую половину возвращаемого значения trunc() как идентификатор и Boom. - person bbum; 22.08.2011
comment
Ах, моя ошибка. Я думал, что trunc вернул целое число. Спасибо за разъяснения, ребята. Этот сайт дает мне больше информации, чем все мои объективные книги по C вместе взятые. - person wayne; 23.08.2011

Вы пытались привести тип возврата из trunk(), например....

newGraph.thumbnailImageName = [NSString stringWithFormat:@"%d.%@",(int)trunc([newGraph.dateCreated timeIntervalSinceReferenceDate]),@"png"];

Это выстрел в темноте, но я полагаю, что NSString не знает тип возвращаемого значения для функции trunc.

person Simon    schedule 22.08.2011