Я вижу несколько особенностей:
error = [[NSError alloc] init];
responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
Обычно вы просто делаете:
NSError *error = nil;
responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
Переменная ошибки будет заполнена адресом объекта ошибки, который автоматически высвобождается, если естьошибка, в противном случае она должна оставаться нулевой.Не выделяйте его самостоятельно, так как вы можете освободить не тот (который был возвращен методом sendSynchronousRequest:
и т. Д.).Это может вызвать перевыпуск в конце вашего метода.
NSMutableDictionary *tempDict= [[[NSMutableDictionary alloc] init] autorelease];
if (request)
{
Parser *parser = [[Parser alloc] init];
tempDict = [parser readXMLString:tempString];
В блоке if вы перезаписываете указатель на tempDict
вы только что создали.Это утечка памяти (но не причина вашей проблемы). Обновление : созданный вами файл выпущен автоматически.Нет утечки.
Вы также не release
Parser
, используемые в блоке if (и локально для него).
Вы никогда не проверяете значение ошибки, чтобы увидеть, действительно ли произошла ошибка.Как я уже сказал, вы должны установить error
на nil
перед вызовом sendSynchronousRequest:etc.
, а затем проверить, все еще ли оно nil
, и если нет, отреагировать соответственно:
if (error)
{
// error handling
}
Какой тип возврата [parser readXMLString: tempString];
?Может ли это быть массив, а не словарь?Например, массив словарей?
Добавить
NSLog(@"%@", tempDict);
в request:
перед возвратом tempDict
.Что это показывает?
getObjects:AndKeys:
, вероятно, называется -[NSMutableDictionary initWithDictionary:]
.Очевидно, что real тип словаря, возвращаемого request:
, не является словарем, это массив.Посмотрите, что я написал выше.