我正在使用带有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];
}
有什么想法吗?如何解决这个问题?
答案 0 :(得分:1)
您的ImageObject
课程需要符合NSCopying
协议。
这个answer here更好地解释了并向您展示了代码的样子。
我还认为您需要使用[imgObj copy]
代替[imgObj mutableCopy]
,因为根据apple docs:
NSMutableCopying协议声明了一种提供对象可变副本的方法。 仅定义“不可变与可变”区别的类应采用此协议。 没有定义这种区别的类应该采用NSCopying。