gpt4 book ai didi

ios - 如何将 NSObject 从一个 View Controller 传递到另一个 View Controller

转载 作者:行者123 更新时间:2023-11-29 03:56:34 25 4
gpt4 key购买 nike

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

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

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

代码:

我的 NSObject 为:

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

在 VC1 View Controller 中:

我将我的 nsobject 传递给 VC2 View Controller ,如下所示:

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

在 VC2 View Controller 中:

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];
}

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

最佳答案

您的ImageObject类需要符合NSCopying协议(protocol)。这answer here更好地解释并向您展示代码的样子。

我还认为您需要使用 [imgObj copy] 而不是 [imgObj mutableCopy] 因为根据 apple docs :

NSMutableCopying 协议(protocol)声明了一种用于提供对象的可变副本的方法。只有定义了“不可变与可变”区别的类才应该采用此协议(protocol)。没有定义这种区别的类应该采用 NSCopying 来代替。

关于ios - 如何将 NSObject 从一个 View Controller 传递到另一个 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16415764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com