如何将NSObject从一个视图控制器传递到另一个视图控制器

时间:2013-05-07 09:36:01

标签: ios uiviewcontroller copy automatic-ref-counting nsobject

我正在使用带有arc的iOS 5 SDK。我想将NSObject从VC1视图控制器传递到VC2视图控制器,进行修改并重新放入VC1控制器。我不想从VC1和VC2控制器指向相同的nsobject。每当我传递nsobject时,它应该创建该nsobject的副本并进行修改。 (不要修改实际的nsobject)。

我尝试了以下代码,但它崩溃并给出错误

- [ImageObject mutableCopyWithZone:]:无法识别的选择器发送到实例0x1364ec20

代码:

我将NSObject视为:

@interface ImageObject : NSObject
@property (copy,nonatomic) NSString *path;
@property (nonatomic, readwrite) int id;
@end

在VC1视图控制器中:

我将我的nsobject传递给VC2视图控制器,如下所示:

VC2ViewController *vc2 = [[VC2ViewController alloc] initWithNibName:@"VC2ViewController" bundle:nil];
vc2.imageObj = [imgObj mutableCopy];
[self.navigationController pushViewController:vc2 animated:YES];

在VC2视图控制器中:

VC2ViewController.h文件

#import "ImageObject.h"
@interface VC2ViewController : UIViewController
@property (retain,nonatomic) ImageObject *imageObj; 
@end

VC2ViewController.m文件

//修改nsobject如下

-(void)modifyObject
{
UIViewController *previousViewController = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-2];
        if ([previousViewController isKindOfClass:[VC1ViewController class]])
        {
            VC1ViewController *parent = (VC1ViewController *) previousViewController;
            if(parent != nil)
            {
                _imageObj.id = 2;
                [parent reloadData:_imageObj];
            }
            parent = nil;
        }
[self.navigationController popViewControllerAnimated:YES];
}

有什么想法吗?如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您的ImageObject课程需要符合NSCopying协议。 这个answer here更好地解释了并向您展示了代码的样子。

我还认为您需要使用[imgObj copy]代替[imgObj mutableCopy],因为根据apple docs

NSMutableCopying协议声明了一种提供对象可变副本的方法。 仅定义“不可变与可变”区别的类应采用此协议。 没有定义这种区别的类应该采用NSCopying。