Переименование классов контроллеров в MonoTouch MonoDevelop - PullRequest
4 голосов
/ 14 марта 2012

Каков наилучший способ переименовать класс, который наследует UIViewController и имеет класс designer.cs, связанный с раскадровкой?

Сначала я попытался переименовать файл .cs в MonoDevelop.Это сработало, но файл designer.cs не был переименован вместе с ним, как и имя класса.

Затем я переименовал имя класса.Это успешно изменило имя класса в файлах .cs и .designer.cs, но все равно не изменило имя файла .designer.cs.Это также не изменило имя «Пользовательского класса» для контроллера в XCode.

Так что в XCode я изменил имя Пользовательского класса и сохранил, а затем переключился обратно на MonoDevelop, к моему ужасу, который он создалновый .cs с тем же именем, что и переименованный, и новый файл .designer.cs, который он поместил в исходный (переименованный) файл .cs рядом со старым (не переименованным) файлом a.designer.cs!

Может кто-нибудь сказать мне последовательность шагов, которые я должен был предпринять?

Ответы [ 4 ]

4 голосов
/ 14 марта 2012

Переименовать файл довольно сложно, поскольку MD не поддерживает переименование сгруппированных файлов.Вам придется вручную отредактировать csproj или удалить файлы из проекта, переименовать в Finder и добавить их обратно.

Переименование класса несколько проще, но главное - понять, что класс на самом делеимеет два имени - имя .NET и имя Obj-C.Переименование имени .NET должно быть простым, вы можете просто использовать команду переименования в MD.

Имя Obj-C применяется к классу в атрибуте [Register ("SomeName")] и являетсяимя, которое используется в XIBS и XCode.Однако имейте в виду, что MonoDevelop попытается создать аналоги .NET любых классов, которые, по его мнению, были созданы в Xcode.Это означает, что вы должны сначала изменить имя Obj-C в MonoDevelop, затем переключиться на Xcode и изменить там Custom Class.

2 голосов
/ 26 марта 2012

Вы должны зайти в файл .csproj и добавить тег.Например:

   <Compile Include="MainWindow.cs" />
    <Compile Include="MainWindow.designer.cs">
      <DependentUpon>MainWindow.cs</DependentUpon>
    </Compile>

Это покажет правильную связь между файлами в окне проекта MonoDevelop.

Между прочим, мой опыт показывает, что эта зависимость предназначена исключительно для удобства.Добавьте новый файл designer.cs в решение, и код скомпилируется просто отлично: зависимость, похоже, является своего рода документацией.

ТАКЖЕ: удалить или переименовать эти зависимые файлы нельзя вПанель проекта MonoDevelop: вам нужно перейти в Finder (если вы находитесь в OSX, Explorer, если вы находитесь в Windows) и разобраться с файлами там, чтобы переименовать или иным образом манипулировать ими, ТО исправьте файл MonoDevelop csproj вручную.Хорошая новость заключается в том, что это не сложно, и работает нормально, когда вы делаете это, и вы получаете новое крутое хардкорное понимание того, как проект сплочен.

0 голосов
/ 09 апреля 2014

Я испробовал все решения выше и не работал.Наконец, я просто использовал «Заменить в файлах», просматривая все решение.После этого я сделал «Rebuild» в проекте и работал нормально.

0 голосов
/ 07 сентября 2012

Многим также приходится задумываться о системе контроля версий. Этот способ работает для меня:

  1. Выйти из MonoDevelop
  2. В системе контроля версий переименуйте файлы
  3. Откройте файл csproj в текстовом редакторе - найдите и замените
  4. Открыть MonoDevelop
  5. Открыть XxxViewController.cs - найти и заменить
  6. Откройте XxxViewController.designer.cs - поиск и замена
  7. Открыть XxxViewController.xib - найти и заменить

У вас может возникнуть соблазн использовать Refactor / Rename вместо поиска и замены на шаге 5, но это заставит MonoDevelop переименовать XxxViewController.designer.cs в XxxViewController_1.cs по какой-то причине.

Кроме того, у вас может возникнуть желание удалить файлы из проекта, прежде чем переименовать их в системе управления версиями, а затем снова добавить их в проект (чтобы вам не пришлось редактировать файл csproj вручную). Это будет работать, но часть «DependentUpon» исчезнет из файла csproj, в результате чего файл конструктора не будет находиться ниже своего аналога. Ничего страшного, но в Solution Explorer это выглядит менее красиво.

...