爲了瞭解我在做什麼而沒有發佈代碼頁...我有一個NSOperation,我用它來處理添加到文件夾中的文件。在那個NSOperation中,我使用NSNotificationCenter來在任何新作業啓動時向NSView發送通知。這個想法是,我想添加一個新的子視圖來給我一些關於剛剛開始的工作的信息。問題是我似乎無法獲得新的子視圖來繪製。這是我現在所擁有的。NSView和動態加載子視圖
- (void)drawRect:(NSRect)dirtyRect
{
NSLog(@"Draw Count %i", [jobViewArray count]);
int i = 0;
while (i < [jobViewArray count]) {
[self addSubview:[jobViewArray objectAtIndex:i]];
}
}
,然後進一步下跌:
-(void) newJobNotification: (NSNotification *) notification
{
if (!jobViewArray)
jobViewArray = [[NSMutableArray alloc] init];
++jobCount;
NSRect rect;
rect.size.width = 832;
rect.size.height = 120;
NSPoint point = { 0, ((jobCount * 120) - 120) };
rect.origin = point;
ProgressView *newJob = [[ProgressView alloc] initWithFrame:rect];
[jobViewArray addObject:newJob];
NSLog(@"Notice Count %i", [jobViewArray count]);
}
}
當我使用我的應用程序添加一個任務,該通知是正確的我的NSView接收時,子視圖中正確添加到jobViewArray
,但後來當drawRect:
再次被調用我的jobViewArray
爲空。這是我第一次嘗試做這樣的事情,所以我可能在這裏做了一些完全錯誤的事情......我想這是因爲它不起作用吧?
您的通知中的jobViewArray計數的日誌語句是否顯示您期望的內容? jobViewArray是一個屬性? – sosborn
是的,在通知方法中,log語句返回的計數爲1,但後來在drawRect中返回0. jobViewArray是一個具有以下定義的屬性:@property(readwrite,copy)NSMutableArray * jobViewArray;' – Kris
在通知將該日誌語句放在頂部。現在它總是會返回至少一個,因爲如果你不做任何工作,你總是創建一個jobArray。另外,iain是正確的,你不應該在drawRect中添加視圖。 – sosborn