我是数组和对象的新手。我有一个类HowToPlay.h(当然也有.m)他们定义了两个数组
NSMutableArray *nibs;
NSMutableArray *unusedNibs;
@property (nonatomic, retain) NSMutableArray *nibs;
@property (nonatomic, retain) NSMutableArray *unusedNibs;
然后我们跳进.m,
我为阵列写了所有的东西,
nibs = [[NSMutableArray alloc]initWithObjects:@"Question 2", @"Question 3", nil];
self.unusedNibs = nibs;
[nibs release];
然后我还有另一个名为Question 1的类,我需要能够在该类中使用此数组,并且能够更改它,但保留对HowToPlay.m文件的更改。
这就是为什么,基本上这个数组加载随机NIB文件,然后在使用它们时从数组中删除它们。
问题1中的这里是我正在做什么来使用数组
random = arc4random() % [self.unusedNibs count];
NSString *nibName = [self.unusedNibs objectAtIndex:random];
[self.unusedNibs removeObjectAtIndex:random];
if (nibName == @"Question 3") {
Question_3 *Q3 = [[Question_3 alloc] initWithNibName:@"Question 3" bundle:nil];
Q3.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:Q3 animated:YES];
[Q3 release];
}
if (nibName == @"Question 2") {
Question_2 *Q2 = [[Question_2 alloc] initWithNibName:@"Question 2" bundle:nil];
Q2.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:Q2 animated:YES];
[Q2 release];
}
这一切似乎都运行正常,但我遇到的问题是,即使这一行运行,数组中的对象似乎也没有被删除
[self.unusedNibs removeObjectAtIndex:random];
我试过制作它
[HowToPlay.unusedNibs removeObjectAtIndex:random];
我收到错误expected '.' before '.' token
在我看来,我有权读取数组,但不能更改它。任何方法来解决这个问题,我可以改变阵列?感谢
更新:
这是整个HowToPlay.h文件内容:
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
int score;
int usedQ1;
int usedQ2;
int usedQ3;
NSMutableArray *nibs;
NSMutableArray *unusedNibs;
@interface HowToPlay : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> {
UIPickerView *selectType;
NSMutableArray *selectArray;
AVAudioPlayer *audioPlayer;
UIActivityIndicatorView *progress;
UIButton *worldButton;
UIButton *politicsButton;
UIButton *starButton;
}
@property (nonatomic, retain) NSMutableArray *nibs;
@property (nonatomic, retain) NSMutableArray *unusedNibs;
@property (nonatomic, retain) IBOutlet UIButton *worldButton;
@property (nonatomic, retain) IBOutlet UIButton *politicsButton;
@property (nonatomic, retain) IBOutlet UIButton *starButton;
@property (nonatomic, retain) IBOutlet UIPickerView *selectType;
@property (nonatomic) int usedQ1;
@property (nonatomic) int usedQ2;
@property (nonatomic) int usedQ3;
@property (readwrite) int score;
-(IBAction)World:(id)sender;
- (IBAction)Politics:(id)sender;
-(IBAction)Stars:(id)sender;
@end
#import "MainViewController.h"
#import "Question 1.h"
#import "Question 2.h"
#import "Question 3.h"
我导入之后因为否则我得到错误
此外,我在HowToPlay的ViewDidLoad部分设置了数组,这是一个坏主意吗?
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
NSURL *click = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/click.wav", [[NSBundle mainBundle] resourcePath]]];
audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:click error:nil];
audioPlayer.numberOfLoops = 1;
progress = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
progress.frame = CGRectMake(0.0, 0.0, 30.0, 30.0);
progress.center = self.view.center;
[self.view addSubview: progress];
usedQ1 = 0;
usedQ2 = 0;
usedQ3 = 0;
selectArray = [[NSMutableArray alloc]init];
[selectArray addObject:@"World"];
[selectArray addObject:@"Politics"];
[selectArray addObject:@"Stars"];
score = 0;
nibs = [[NSMutableArray alloc]initWithObjects:@"Question 2", @"Question 3", nil];
self.unusedNibs = nibs;
[nibs release];
}
答案 0 :(得分:1)
如何检查对象是否实际被删除?请发布更多代码,因为从unusedNibs中删除对象的方式似乎没问题。根据此代码:
[self.unusedNibs removeObjectAtIndex:random];
和此代码
[HowToPlay.unusedNibs removeObjectAtIndex:random];
您收到此错误的原因是您尝试使用类名“HowToPlay”而不是其实例“self”访问unusedNibs。
答案 1 :(得分:1)
以下几点:首先,要在HowToPlay中调用unusedNib这样的属性,它看起来像是在调用类而不是实例。您需要创建一个HowToPlay对象并将其分配给Question1对象中的属性,以便一个Object可以调用的问题。 Question1不应该为unusedNib调用'self',因为它不拥有它。
通过你正在做的事情,将函数计算出HowToPlay类中的下一个随机控制器可能更有意义。这样你的问题视图控制器可以要求它返回下一个控制器,而不必在每个问题控制器上复制该代码。