难倒,从班级中检索一个字符串

时间:2011-12-12 00:19:45

标签: iphone ios

我有一个自定义表格单元格类。

TextInput.h

@interface TextInput : UITableViewCell <UITextFieldDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate> {
    UILabel *cellLabel;
    UITextField *textFieldBox;
    NSString *imageFile;  
}

@property (nonatomic, retain) UITextField *textFieldBox;
@property (nonatomic, retain) UILabel *cellLabel;
@property (nonatomic, retain) NSString *imageFile;

其中有一个相机按钮,并将图像保存到本地文档文件夹。我将文件名保存到imageFile,后者是使用唯一名称生成的。

Textinput.m

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    //retrieve image
    UIImage *image = [info objectForKey: @"UIImagePickerControllerOriginalImage"];

    imageFile = [self findUniqueSavePath];

    [self saveImage:image:imageFile];
    //dismiss the camera 
     CoreTableAppDelegate *mainDelegate = (CoreTableAppDelegate *) [[UIApplication sharedApplication] delegate];
    [mainDelegate.rootViewController dismissModalViewControllerAnimated: YES];
}

- (NSString *)findUniqueSavePath {
    NSString *path;
    CFUUIDRef uuid = CFUUIDCreate(NULL);
    NSString *uuidString = [(NSString *)CFUUIDCreateString(NULL, uuid) autorelease];
    CFRelease(uuid);
    path = [uuidString stringByAppendingPathExtension: @"png"];
    return path;
}

除非我想从父UItableView类中检索文件的名称,否则一切正常。

EditTankDescription.m

- (void)getCell
{

    TextInput *cell1 = (TextInput *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]];    
    NSLog(@"save imageFile:%@", cell1.imageFile); <***** crashes on this line

}

它在带有EXC_BAD_ACCESS的NSLog语句中崩溃。这就像imageFile不是NNString。如果我设置imageFile = @“SOme random string”,则没有错误。 我很难过。

感谢您的任何见解。

2 个答案:

答案 0 :(得分:1)

imageFile = [self findUniqueSavePath];

你没有保留imageFile ivar。当你去读取字符串时,它是一个悬空指针,你得到EXC_BAD_ACCESS。

相反,请使用属性访问器,它将处理释放并为您保留:

self.imageFile = [self findUniqueSavePath];

或者您可以直接设置ivar,在这种情况下,您需要自己进行内存管理:

[imageFile release];
imageFile = [[self findUniqueSavePath] retain];

答案 1 :(得分:0)

在getCell的第一行放置一个断点。 cell1很可能是零。 您的索引路径是否正确?也许零段只有一行?行也是零索引的:

[NSIndexPath indexPathForRow:0 inSection:0]