如何在以下方法中保留值?

时间:2011-06-29 04:00:37

标签: objective-c ios

@interface SignDocumentController : UIViewController<NSXMLParserDelegate> {
    NSMutableString *signFaxString;
    NSString * messageId;
    NSMutableData *xmlData;
    NSURLConnection *connectionInprogress;
    NSURLConnection *connectionInprogress2;


    NSString * annotationKey;

    NSString *firstName;
    NSString *lastName;
    NSString *date;
    NSString *signature;


    IBOutlet UIImageView *image;
}

@property(nonatomic,retain)UIImageView * image;


@end

-(void)parser:(NSXMLParser *)parser
didStartElement:(NSString *) elementName
 namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
   attributes:(NSDictionary *)attributeDict
{

    if ([elementName isEqual:@"SignatureInfo"]) {

        signFaxString = [[NSMutableString alloc]init]; 

        firstName = [attributeDict objectForKey:@"FirstName"];
        lastName = [attributeDict objectForKey:@"LastName"];
        date = [attributeDict objectForKey:@"Date"];
        signature = [attributeDict objectForKey:@"Signature"];
    }

    if ([elementName isEqual:@"AddAnnotationResult"]) {
        signFaxString = [[NSMutableString alloc]init]; 
    }


}

firstName,lastName,date,signature的值不会停留,当我尝试以不同的方法访问firstName,lastName ETC时出现错误:

[CFString respondsToSelector:]:发送到解除分配的实例0x4ec63b0的消息

我尝试过使用:

firstName = [NSString stringWithString attributeDict objectForKey:@"FirstName"]; 

但这也不起作用。我知道这是一个愚蠢的问题,但我可以使用一些帮助。

由于

2 个答案:

答案 0 :(得分:3)

您还可以将firstName和其他人声明为属性和retain。如下

@property(nonatomic,retain)NSString* firstName;
@property(nonatomic,retain)NSString* lastName;    
@property(nonatomic,retain)NSString* date;
@property(nonatomic,retain)NSString* signature;

在.m级。

@synthesize firstName,date,lastName,signature;

并在dealloc函数中释放它们。

在您的班级中使用self所有属性变量。

self.firstName = [NSString stringWithString:attributeDict objectForKey:@"FirstName"];

<强>编辑:

还要考虑 @bbum 评论..

答案 1 :(得分:2)

要保留它,只需向对象发送retain消息。

firstName = [[attributeDict objectForKey:@"FirstName"] retain];

release稍后。