gpt4 book ai didi

ios - 在“init”中初始化的对象无法在“viewDidLoad”中访问

转载 作者:行者123 更新时间:2023-12-01 17:42:20 25 4
gpt4 key购买 nike

我有一个奇怪的问题:我以“init”方法加载对象数据。当我尝试在“viewDidLoad”中访问它时,我的应用程序崩溃。这是代码:

@interface UploadCenterViewController () {
NSMutableArray *videos;
}

@end

@implementation UploadCenterViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
if (![self loadVideos]) {
[self saveVideos];
}
}

return self;
}

-(void)saveVideos {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *encodedData = [NSKeyedArchiver archivedDataWithRootObject:videos];
[defaults setObject:encodedData forKey:@"VIDEOS"];
[defaults synchronize];
}

-(bool)loadVideos {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *encodedData = [defaults objectForKey:@"VIDEOS"];
if (encodedData) {
videos = (NSMutableArray *)[NSKeyedUnarchiver unarchiveObjectWithData:encodedData];

NSLog(@"array size: %d", [videos count]);

return true;
} else {
videos = [[NSMutableArray alloc] init];
return false;
}
}

- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"%d", [videos count]);
}

加载数据时,“视频”数组包含一个对象。在“viewDidLoad”中访问它时,整个应用程序崩溃。

有人有主意吗?

最佳答案

videos声明为@property,并在各处将其用作self.videos。崩溃是由于分配了值videos即将被释放。 videos的范围仅在该方法内,因此可能会崩溃。由于要在该方法之外使用此方法,因此需要保留它,并且可以使用@property进行操作,如下所述。

例如:

@interface UploadCenterViewController () {}

@property(nonatomic, strong) NSMutableArray *videos;

@end

-(void)saveVideos {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *encodedData = [NSKeyedArchiver archivedDataWithRootObject:self.videos];
[defaults setObject:encodedData forKey:@"VIDEOS"];
[defaults synchronize];
}

-(bool)loadVideos {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *encodedData = [defaults objectForKey:@"VIDEOS"];
if (encodedData) {
self.videos = (NSMutableArray *)[NSKeyedUnarchiver unarchiveObjectWithData:encodedData];
NSLog(@"array size: %d", [self.videos count]);
return true;
} else {
self.videos = [[NSMutableArray alloc] init];
return false;
}
}

- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"%d", [self.videos count]);
}

关于ios - 在“init”中初始化的对象无法在“viewDidLoad”中访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15304694/

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