Я новичок в мире разработки для iphone.
Я начал новый проект, я использовал его, чтобы проверить то, что я узнал о цели c, он в основном отправляет и получает данные с моего локального сервера,Затем я храню некоторые из этих данных в классе, он отлично работает.Все в командной строке.
определение моего класса:
@interface MyClient : NSObject {
NSString *name;
NSMutableDictionary *in, *out;
}
-(BOOL) send;
-(BOOL) receive;
Я установил значения out, преобразовал их в xml и отправил на мой сервер.мой сервер отвечает, я получаю значения "in", имя - это строка, которая содержит какое-то специальное значение значений "in".
Проблема возникает, когда я пытаюсь смешать свой код с некоторым примером / демонстрацией.нашел в интернете, демо приносит какой-то MVC ??файлы (* Handler.h / m, * ViewController.h / m, * AppDelegate.h / m).Есть одна кнопка (btnStart), если я нажимаю эту кнопку, она вызывает
- (IBAction) start: (id) sender;
, все работает нормально, если я помещаю вызовы отправки и получения в метод запуска.
НО ...
Я попробовал две кнопки to to: отправить и получить, оба работают (я попробовал их и отправил вывод на консоль), оба метода:
1) - (IBAction) send: (id) sender;
2) - (IBAction) receive: (id) sender;
оба внутри * Обработчик.m
затем: метод 1) просто выполнит [myClient send];2) просто выполнит [myClient receive];
не работает, выдает ошибку "BAD_ACCESS", я отлажен (я использовал NSZombie ..) ...
Iобнаружил, что данные, которые хранятся (in, out, name) при вызове [myClient send], освобождаются / уничтожаются / не существуют при вызове [myClient receive]
Я не вызывал [myClient release] иличто-то вроде этого.
вопросов: что я делаю не так?где этот код (метод 1) и 2)) должен быть?
спасибо.
ОБНОВЛЕНО: Вот некоторый код, он огромен, поэтому я скопировал и вставилзначительная часть, дайте мне знать, если вам нужно больше кода, спасибо!
// MyClass.h
@interface MyClient : NSObject {
NSString *name;
NSString *id;
NSMutableDictionary *paramIn, *paramOut;
}
-(BOOL) send;
-(BOOL) receive;
-(void) setParam:(NSString *) key value: (NSString *) value;
-(NSString *) getParam:(NSString *) key;
//MyClass.m
#import "MyClass.h"
#import "TBXML.h"
@implementation MyClass
-(id) init {
if ( !(self= [super init]) ){
return nil;
}
paramIn=[[NSMutableDictionary alloc] init] ;
paramOut=[[NSMutableDictionary alloc] init] ;
return self;
}
-(void) setParam:(NSString *) key value: (NSString *) value {
[paramOut setObject:value forKey:key];
}
-(NSString *) getParam:(NSString *) key {
return [paramIn objectForKey:key];
}
-(BOOL) send{
NSString *xml=[self getXML];
// url conection ...
// NSURLReq ...
NSData *data= [ buffer dataUsingEncoding: NSASCIIStringEncoding];
TBXML * tbxml = [[TBXML tbxmlWithXMLData: data] retain];
BOOL r=[self getXML: tbxml usingThisDictionary: ¶mIn];
if (r == YES) {
name = [self getParam:@"nameResponse"];
id =[self getParam:@"myId"];
}
[xml release];
[data release];
[tbxml release];
return r;
}
-(BOOL) getXML:(TBXMLElement *)element usingThisDictionary:(NSMutableDictionary **) map {
// search for each element...
if (someError) return NO;
[*map setObject: [TBXML attributeValue:attribute] forKey:[TBXML elementName:element]];
return YES;
}
@end
ОБНОВЛЕНО: Спасибо, ребята (IwasRobbed, Simon, TechZen)
Я былотладка и изменение кода ... Я обнаружил, что: чтобы сохранить имя и значение идентификатора, я должен выполнить:
name =[[self getParam:@"nameResponse"] copy];
id =[[self getParam:@"myId"] copy];
вопросы: Q1.Говоря о старом коде (без copy
), значение name
и id
высвобождается, потому что
1) оно привязано к словарю paramIn
, а paramId
освобождается?
ИЛИ
2) оба значения скопированы из paramIn
dictionay, но нет инструкции сохранения / копирования
Я думал, ответ 2), верно?
Q2.как я могу сохранить значения, хранящиеся в NSMutableDictionaries paramIn
и paramOut
?
спасибо