我尝试在initWithFrame中初始化/分配它,但是后来的对象不会被添加。
它只适用于我正在调用的这个方法,但每次用户刷新视图时都会调用此方法,因此它会初始化/分配一百次。 不知道为什么它不能在initWithFrame中工作。
我需要知道正确的init方式并添加..!
-(void)queryParseMethod {
self.imageFilesArray = nil;
self.imageFilesArray = [[NSMutableArray alloc]init];
[self.imageFilesArray addObjectsFromArray:objects];
if (!error) {
for (PFObject *object in objects) {
int index = (int)[self.favArray indexOfObject:[object objectId]];
[self.imageFilesArray replaceObjectAtIndex:index withObject:object];
}
[self.favCV reloadData];
}}
答案 0 :(得分:2)
为什么不呢:
if (self.imageFilesArray == nil) {
self.imageFilesArray = [[NSMutableArray alloc] init];
[self.imageFilesArray addObjectsFromArray:objects];
}
确保imageFilesArray
是一个强大的属性。
答案 1 :(得分:0)
您最可能的问题是initWithFrame:
未被调用。如果此视图来自故事板,那么您需要将其放在awakeFromNib
中,因为storyboard / nib加载的对象使用initWithCoder:
初始化,而不是其指定的初始化程序。
您通常不希望尝试在initWithCoder:
中进行初始化,因为它过早被调用。在分配了所有IBOutlet之后调用awakeFromNib
。
对于有经验的开发人员来说,将初始化分解为自己的方法非常普遍:
- (void)setup {
// Do your setup here
}
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[self setup];
}
}
- (void)awakeFromNib {
[self setup];
}
这样做可以确保在任何一种情况下都初始化对象。
另一个常见的解决方案是延迟初始化,特别是对于像NSMutableArray
:
@interface MyView
@property (nonatomic, readonly, strong) NSMutableArray *imageFilesArray;
@end
@implementation MyView
- (NSMutableArray *)imageFilesArray {
if (_imageFilesArray == nil) {
_imageFilesArray = [NSMutableArray new];
}
return _imageFilesArray;
}