gpt4 book ai didi

ios - 尝试存储在 ViewController 中接收到的值,并将它们存储在 iOS 中另一个 View Controller 的 NSMutableArray 的单个实例中

转载 作者:行者123 更新时间:2023-11-29 03:17:46 26 4
gpt4 key购买 nike

我有一个应用程序,其中 View Controller (A) 被连续两次调用。现在每次调用它时,都会创建一个 NSString 对象,我需要将该值存储在一个 NSMutableArray 中,它是另一个 View Controller (B) 的公共(public)属性。

在 A 中,我创建了第二个 View Controller (B) 的实例,并使用该实例将 NSString 对象添加到我创建为公共(public)属性的 NSMutableArray 中。稍后,当我在 View Controller B 中并打印 NSMutableArray 属性的内容时,数组为空。为什么?这是 View Controller A 中的代码:

-(void)viewDidLoad {

ViewControllerA *aVC = [[ViewControllerA alloc] init];
if (aVC.stringArray == nil) {
aVC.stringArray = [[NSMutableArray alloc] init];
}

[aVC.stringArray addObject:@"hello"];
[aVC.stringArray addObject:@"world"];

for (NSString *wow in aVC.stringArray) {
NSLog(@"The output is: %@", wow);
}

}

在我的 View Controller B 类中,我有以下代码:

- (IBAction)buttonAction:(UIButton *)sender {


NSLog(@"Button selected");
for (NSString *test in self.stringArray) {
NSLog(@"Here are the contents of the array %@", test);
}

}

现在调用了 buttonAction 方法,正如我在系统输出中看到的行 Button selected 一样,但没有打印任何其他内容。为什么?我想确保的一件事是 View Controller A 被调用了两次,这意味着我希望在输出中看到“Hello World”、“Hello World”(即打印两次),而不是只打印一次“Hello World” .

我想指出的另一件事是,View Controller B 可能根本不会被调用,或者它可能会在稍后的某个时间点被调用。无论如何,每当调用 View Controller B 时,我都希望数组中的值可用,并等待用户访问。我该怎么做?

最佳答案

您的方法并不理想,可能会导致内存循环,两个对象相互持有强指针。

您可以通过两种方式实现您的目标;

委托(delegate)协议(protocol)

此方法允许您设置委托(delegate)和委托(delegate)方法以在 View Controller 之间来回传递数据

在viewControllerA.h中

@protocol viewControllerADelegate <NSObject>

- (void)addStringToNSMutableArray:(NSString *)text;

@end

@interface viewControllerA : UIViewController

@property (nonatomic, weak) id <viewControllerADelegate> delegate;

在viewControllerB.m中

// create viewControllerA class object
[self.viewControllerA.delegate = self];

- (void)addStringToNSMutableArray:(NSString *)text
{
[self.mutableArray addObject:text];
}

在viewControllerA.m中

[self.delegate addStringToNSMutableArray:@"some text"];

实用类

或者,您可以使用具有可公开访问的方法(和临时数据存储)的实用程序类。这允许两个 viewController 类访问共享数据存储,而且如果您使用类方法,您甚至不需要实例化实用程序类。

在 XYZUtilities.h 中

#import <Foundation/Foundation.h>

@interface XYZUtilities : NSObject

+ (void)addStringToNSMutableArray;
@property (strong, nonatomic) NSMutableArray *array;

@end

在 XYZUtilities.m 中

+ (void)addStringToNSMutableArray
{
NSString *result = @"some text";
[self.array addObject:result];
}

+ (NSArray)getArrayContents
{
return self.array;
}

在viewControllerA.m中

NSString *stringFromObject = [XYZUtilities addStringToNSMutableArray];

在viewControllerB.m中

self.mutableArray = [[NSMutableArray alloc] initWithArray:[XYZUtilities getArrayContents]];

关于ios - 尝试存储在 ViewController 中接收到的值,并将它们存储在 iOS 中另一个 View Controller 的 NSMutableArray 的单个实例中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21469668/

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