我有一个显示TrainingGroup实体的NSOutlineView
。
每个TrainingGroup代表本地计算机上的文件夹。
NSOutlineView
绑定到NSTreeController
,其获取谓词为IsTrained == 0
每个TrainingGroup都可以分配给一个项目。
每个TrainingGroup都有许多TrainingEntries,显示该文件的工作时间。
将TrainingGroup分配给项目时,IsTrained
设置为YES
。
在分配给项目时,所有后代也分配给该项目,其IsTrained
属性也设置为YES
。
项目列绑定到projectTopLevel
属性。
示例
整棵树看起来像这样:
Name Project IsTrained
Users nil NO
John nil NO
Documents nil NO
Acme Project Acme Project YES
Proposal.doc Acme Project YES
12:32-12:33 Acme Project YES
13:11-13:33 Acme Project YES
... etc
Budget.xls Acme Project YES
Big Co Project Big Co Project YES
Deadlines.txt Big Co Project YES
Spec.doc Big Co Project YES
New Project nil NO
StartingUp.doc nil NO
Personal Stuff Personal YES
MyTreehouse.doc Personal YES
Movies nil NO
Aliens.mov nil NO
StepMom.mov nil NO
NSOutlineView只能看到这个:
Users nil NO
John nil NO
Documents nil NO
New Project nil NO
StartingUp.doc nil NO
Movies nil NO
Aliens.mov nil NO
StepMom.mov nil NO
如果您将电影指定为个人,则视图现在将如下所示:
Users nil NO
John nil NO
Documents nil NO
New Project nil NO
StartingUp.doc nil NO
代码
TrainingGroup.m
-(void)setProjectTopLevel:(JGProject *)projectToAssign {
[self setProjectForSelf:projectToAssign];
[self setProjectForChildren:projectToAssign];
}
-(void)setProjectForSelf:(JGProject *)projectToAssign {
[self setProject:projectToAssign];
}
-(void)setProjectForChildren:(JGProject *)projectToAssign {
for (TrainingGroup *thisTrainingGroup in [self descendants]) {
[thisTrainingGroup setProject:projectToAssign];
if(projectToAssign != nil) {
[thisTrainingGroup setIsTrainedValue:YES];
} else {
[thisTrainingGroup setIsTrainedValue:NO];
}
// Other code updating rules.
}
}
-(JGProject *)projectTopLevel {
return [self project];
}
-(NSSet *)untrainedChildren {
// Code that loops through all children returning those
// whose isTrained is NO. Omitted for brevity.
}
如上所示,我正在主线程上运行所有项目分配代码。
如果每个文件夹下有数百个时间条目,我的应用就会无法响应。
1模态进度条
方法
好
糟糕
2非模态微调器
方法
好
糟糕
3隐藏
方法
好与坏
4提高效果
方法
好
糟糕
据我所见,上述选项都不理想。
1。哪个是最佳选择?
2。还有其他选择吗?
第3。我可以改进哪些方法?
答案 0 :(得分:1)