2012-02-22 3 views
0

Я не могу понять, почему вывод self.tmp имеет значение null.Невозможно добавить строку

Вот код, я использую

[self.dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) 
{ 
    NSMutableString *t = [NSString stringWithFormat:@"%@ - %@", key, obj]; 
    [self.tmp appendString:t]; 
}]; 

NSLog(@"%@", self.tmp) --> print null; 

tmp объявлен NSMutableString.

Я могу подтвердить, что dict ivar содержит данные.

+0

Где и как инициализируется 'self.temp'? – sch

+0

Каково первоначальное значение 'self.tmp'? – dasblinkenlight

ответ

3

Потому что self.tmp сам по себе nil. Вы объявили это, но вы когда-либо устанавливали его или выделяли изначально? Приложение будет работать, только если вещь, которую вы добавляете, является существующей строкой.

В Objective-C вы не увидите сообщение об ошибке, если вы попытаетесь добавить объект nil, вы увидите только результат, который вы видите, а это значит, что ничего не произошло.

Просто перед кодом вы размещаете здесь, вы можете сделать это:

self.tmp = [NSMutableString string]; 
+0

В описанном выше сценарии, который является лучшим подходом к построению одиночной строки на основе данных словаря? – foho

+0

А, давай. Благодаря ! – foho

0

Можете ли вы подтвердить, что self.tmp != nil прежде чем начать?

+0

Нет, это ничто. – foho

+0

@foho: Как и другие, более подробно опубликованы, это причина вашей проблемы. – JeremyP

0

self.tmp не создан. Do:

self.tmp = [NSMutableString new];

1

Вы должны иметь ваш Ивар TMP инициализируется и выделяется, обязательно инициализировать его как @"", это единственная проблема, почему вы могли бы быть проблемы. Вам не нужно явно выделить его, вы можете использовать autoreleased объект вызова некоторые из класса методы:

self.temp=[NSMutableString stringWithString:@""]; 

Если строка устанавливается как ноль, вы добавляете что-то ноль, а так как ноль может Не обращайте на это поведение, вы получаете неожиданные результаты.

Смежные вопросы