Window의 IB에서 자동 둘러싸기를 설정하면 모든 문서가 동일한 위치에서 열립니다. 문서 파일 이름을 기반으로 문서의 위치를 기억하고 싶습니다.
NSPersistentDocument를 서브 클래스 화하고 현재 windowControllerDidLoadNib:
함수에 자동 저장 이름을 설정했습니다. 이 기능은 거의 정상적으로 작동합니다. 단, 응용 프로그램을 닫지 않고 동일한 문서를 반복해서 열고 닫을 경우 윈도우의 높이가 작은 양 (26 픽셀) 증가 할 때마다 계단식 작업을 수행하는 것과 거의 같습니다. 그러나 앱을 완전히 닫은 다음 다시 열면 문서가 이전 위치를 정확하게 기억합니다. 내가 잘못한 일을하고 있거나 이것이 버그일까요? 창을 다시 열 때마다 크기가 조정되지 않도록 아마도 정리해야 할 정리가 있습니까? 나는 그것의 높이
- (NSRect)windowPositionPreference {
LOG(@"printUserDefaults called");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *autosaveNameKey = [NSString stringWithFormat:@"NSWindow Frame %@", [self autoSaveName]];
NSString *frameString = [defaults objectForKey:autosaveNameKey];
NSArray *array = [frameString componentsSeparatedByString:@" "];
CGFloat x = [[array objectAtIndex:0] floatValue];
CGFloat y = [[array objectAtIndex:1] floatValue];
CGFloat width = [[array objectAtIndex:2] floatValue];
CGFloat height = [[array objectAtIndex:3] floatValue];
NSRect rect = CGRectMake(x, y, width, height+22);
FLOG(@" window frame = %fx, %fy, %fw, %fh", x, y, width, height);
return rect;
}
22 개 픽셀을 추가하는 다음 코드를 추가 한 다음 지금의 - (void)windowControllerDidLoadNib:(NSWindowController *)aController
NSRect rect = [self windowPositionPreference];
[aController.window setFrame:rect display:YES];
같은 프레임을 설정하면
// NSPersistentDocument subclass
- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
LOG(@"windowControllerDidLoadNib called...");
[super windowControllerDidLoadNib:aController];
if ([self autoSaveName] != nil) {
[aController setWindowFrameAutosaveName:[self autoSaveName]];
}
[aController setShouldCascadeWindows:NO];
}
- (NSString*)autoSaveName
{
return [[self fileURL] lastPathComponent];
}
위치는 정확히 유지 될 것으로 보인다 . 확실하게 자동 소설은 단지 작동하도록되어 있습니다.