Принуждение Xcode 4 к компиляции XIB в NIB

Я обновил проект Xcode 3, имеющий три цели, до Xcode 4. Пакеты моих целей больше не содержат файлов NIB - только файлы XIB. В новом проекте Xcode 4 есть и то, и другое (по крайней мере, в симуляторе). Я не вижу никакой разницы между настройками старого и нового проектов Xcode, чтобы учесть эту разницу. Я получаю класс от RichTextBox или Panel, перестраиваю свой проект, добавляя класс в панель инструментов конструктора VS, а затем перетаскиваю настраиваемый пользовательский элемент управления в форму. Все работает нормально, и я могу запустить свой проект ...

Проблема возникает, когда я редактирую свойства формы или настраиваемого пользовательского элемента управления через конструктор. Иногда разработчик удаляет строку инициализации из своего кода программной части, вызывая исключение в конструкторе и исполняемом файле, поскольку элемент управления остается неинициализированным.

Другими словами, следующая строка удаляется, скажем, из Form1.Designer.cs:

this.customRichTextBox1=new CustomRichTextBox();

Никакая другая строка не удаляется из кода программной части, поэтому атрибуты настраиваемого элемента управления все еще устанавливаются, хотя переменная остается неинициализированной.

Мое решение всегда заключалось в том, чтобы вручную инициализировать мой пользовательский элемент управления в коде конструктора - за, но дизайнер в конечном итоге удаляет его снова.

Я считаю, что этого не происходит, когда я создаю Custom UserControl через конструктор (но я не совсем уверен в этом). Это происходит только тогда, когда я определяю что-то вроде следующего вручную:

class CustomRichTextBox:RichTextBox{}

Это так раздражает. Что я делаю не так?


В соответствии с просьбой @Cody, вот шаги для воспроизведения проблемы. Я использую VS2010, но, как мне кажется, эта проблема у меня возникла с 2005 г.

Шаг 1. Создайте новое приложение Windows Forms, любую платформу

Шаг 2. Добавьте следующий класс ниже основного класса Form: (It Просто так случилось, что это элемент управления, который на этот раз вызывает у меня эту проблему.)

class CustomRichTextBox : RichTextBox
{
    Timer tt = new Timer();

    internal CustomRichTextBox()
    {
        tt.Tick += new EventHandler(tt_Tick);
        tt.Interval = 200;
    }


    protected override void OnTextChanged(EventArgs e)
    {
        tt.Stop();
        tt.Start();
    }

    void tt_Tick(object sender, EventArgs e)
    {
        System.Diagnostics.Trace.WriteLine("Hello world!");
    }
}

Шаг 3. Нажмите F6, чтобы перестроить.

Шаг 4. Добавьте элемент управления CustomRichTextBox в форму, перетащив его из панели инструментов.

Шаг 5. Если хотите, вы можете нажать F5, чтобы протестировать приложение, но оно должно работать. Закройте работающее приложение.

Шаг 6. Нажмите F6, чтобы перестроить, и на этом этапе дизайнер должен вылететь со следующим сообщением: «Переменная customRichTextBox1 либо не объявлена, либо никогда не назначалась». (В одном случае произошел полный сбой всего VS, но ошибка обычно содержится в конструкторе.)

Шаг 7. Чтобы исправить проблему, войдите в программный код и инициализируйте переменную, но в следующий раз, когда вы перестроите, строка инициализации исчезнет.

12
задан Eugenio De Hoyos 16 April 2011 в 06:37
поделиться