###Подробное описание, пожалуйста, перейдите!
Все студенты могут оставить комментарий, чтобы вместе прогрессировать!
###2016.12.22
В последнее время у меня было немного свободного времени, поэтому я решил обновить небольшой инструмент, который создал ранее. За это время произошло обновление Xcode8, и, вероятно, этот небольшой инструмент больше не работает. Я попытался запустить проект с помощью cmd+R, но он действительно не работает, так что я решил обновить этот небольшой инструмент.
####Некоторые улучшения в использовании:
####Оптимизация кода:
#####1. Сначала кратко опишу принцип работы:
-> Отдельно записываются цветовые модели до и после изменений (beforeColor и afterColor), а также путь к файлу (filePath); -> Пользовательский ввод преобразуется в необходимый тип, то есть цветное значение преобразуется в модель ColorValue; -> Проходится по пути filePath, находя все файлы .xib и .storyboard, и сохраняется путь к файлу; -> Для каждого файла .xib и .storyboard выполняется операция DOM-парсинга, чтобы найти все элементы color типа NSXMLElement; -> Находятся соответствующие node.name и over для элемента color.
#####2. Некоторые основные фрагменты кода:
// NSTextDelegate получает содержимое ввода
- (void)controlTextDidChange:(NSNotification *)notification
// Выбор пути к файлу
- (IBAction)choseFilePath:(NSButton *)sender
{
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setCanChooseFiles:YES];
[openPanel setCanChooseDirectories:YES];
NSWindow *window = [[NSApplication sharedApplication] keyWindow];
[openPanel beginSheetModalForWindow:window completionHandler:^(NSModalResponse returnCode) {
if (returnCode == 1) {
NSURL *fileUrl = [[openPanel URLs] objectAtIndex:0];
NSString *filePath = [[fileUrl.absoluteString componentsSeparatedByString:@"file://"] lastObject];
NSLog(@"fileContext = %@",filePath);
self.sourcePathTextField.stringValue = filePath;
self.filePath = filePath;
}
}];
}
// RGB-значение преобразуется в четыре десятичных знака
здесь ‘*10000’ снова ‘0.%ld’ - это отсечение десятичной дроби после четырех знаков
- (void)setRed:(CGFloat)red
{
_red = red;
CGFloat temp = red / 255.0;
NSInteger tempValue = temp * 10000;
self.redString = [NSString stringWithFormat:@"0.%ld",tempValue];
}
// Получение XMLDocument
- (NSXMLDocument *)parsedDataFromData:(NSData *)data colorModel:(WDColorModel *)objColorModel
{
NSError *error = nil;
NSXMLDocument *document = [[NSXMLDocument alloc] initWithData:data options:NSXMLNodePreserveWhitespace error:&error];
NSXMLElement *rootElement = document.rootElement;
[self parsedXMLElement:rootElement objColorModel:objColorModel];
if (error) {
NSLog(@"error = %@",error);
}
return document;
}
// Изменение элемента
- (void)parsedXMLElement:(NSXMLElement *)element objColorModel:(WDColorModel *)objColorModel
{
for (NSXMLElement *subElement in element.children) {
if ([subElement.name isEqualToString:@"color"]) {
WDColorModel *obj = [WDColorModel colorModelWithArray:subElement.attributes];
if ([obj isEqual:self.targetColorModel]) {
[self updateXMLNodelWithNode:subElement color:objColorModel];
}
}
[self parsedXMLElement:subElement objColorModel:objColorModel];
}
}
// Обновление NSXMLElement
- (void)updateXMLNodelWithNode:(NSXMLElement *)subElement color:(WDColorModel *)obj
{
NSArray *array = subElement.attributes;
for (NSXMLNode *node in array) {
if ([node.name isEqualToString:@"red"]) {
[node setStringValue:obj.red];
}
else if ([node.name isEqualToString:@"green"]) {
[node setStringValue:obj.green];
}
else if ([node.name isEqualToString:@"blue"]) {
[node setStringValue:obj.blue];
}
}
}
Подробности см. в коде.
end
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )