作者wudidog (呜啦啦)
看板MacDev
标题Re: [问题] 关於iphone程式的问题
时间Sat Jul 3 13:40:34 2010
※ 引述《zonble (zonble)》之铭言:
: ※ 引述《wudidog (呜啦啦)》之铭言:
: : 另外我也发现
: : 我简化掉一个关键
: : 我有用[NSTimer scheduledtimerwithtimeinterval: 1
: : target:self
: : selector:@selector(callAView)
: : userInfo:nil
: : repeats:YES];
: : 我测的结果是,callAView如果不是NSTimer呼叫的selector
: : (注解NSTimer那行,只用[b callAView])
: : 可以正常取用dic内的物件
: : (这代表我的设定基本上没问题没错,对吧!?)
: NSTimer 呼叫的 selector 必须要给一个参数,把你的
: - (void)callAView;
: 改成
: - (void)callAView:(NSTimer *)timer;
: 其实状况是,NSTimer 看你的 selector 格式不对,就根本没在跑。
试了一下,还是不行
我直接贴重要的code好了
FILE: A.h
@interface A : UIView <UIScrollViewDelegate> {
B *m_B;
int m_tag;
}
@end
FILE: A.m
@implement
-(void)addToSubview:(UIImageView*)imageview
loadImage:(NSString*)file {
UIImage *pic = [UIImage imageNamed:file];
[imageview initWithImage:pic];
[imageview setFrame:CGRectMake( 0, 0, 300, 50)];
[m_dic setObject:[NSNumber numberWithInt:m_tag] forKey:@"time"];
imageview.tag = m_tag;
[self addSubview: imageview];
m_tag++;
}
-(id)init {
m_b = [[B alloc] init];
m_tag = 50;
UIImageView *test = [UIImageView alloc];
[self addToSubview:test loadImage:@"a.jpg"];
}
-(void)test {
[m_b setTime];
}
@end
------
FILE: B.h
@interface B : UIImageView {
NSMutableDictionary *m_dic;
NSTimer *m_timer;
}
-(void)setTime;
@end
FILE: B.m
@implement
-(id)init {
[m_dic dictionary];
}
-(void)change:(NSTimer *)timer {
NSLog(@"Change");
//这行开始,「只要用到m_dic」,就会出错 -----
NSLog(@"%@", [m_dic count]);
NSNumber *digit = [m_dic objectForKey:@"time"];
//-------------------------------------------
UIImageView *view = (UIImageView*)[self viewWithTag:digit];
CGRect rect = [view frame];
rect.size.width -= 50;
[view setFrame:rect];
NSLog(@"end");
}
-(void)setTime {
NSLog(@"setTime");
/*----测试用,结果是正常的--------
NSString *key = [NSString stringWithString:@"time"];
NSNumber *digit = [m_dic objectForKey:key];
NSLog(@"%@", digit);
--------------------------------*/
m_timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(change:)
userInfo:nil
repeats:YES];
}
@end
大致上的code是这样
有些variabe name太长或明显无关的code
都拿掉了
有用到的code就只有这样
method执行的顺序是
[[A alloc] init];
[A test];
结果console显示
在要执行m_dic那段code时
Program received signal: “EXC_BAD_ACCESS”
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.76.190
※ 编辑: wudidog 来自: 123.193.76.190 (07/03 13:54)
※ 编辑: wudidog 来自: 123.193.76.190 (07/03 13:55)