Re: [問題] 關於iphone程式的問題
※ 引述《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)
討論串 (同標題文章)
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章