2016-09-23 6 views
0

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

Ошибка при создании приложения. Я получаю свой заставку, а затем просто белый пустой экран.

Я использую Xamarin в Visual Studio 15 с MVVMCross и раскадровки.

Я попробовал следующее:

  1. Reset IOS симулятор
  2. Cleaned решение в Visual Studio
  3. Пробовал другой раскадровку в качестве основного интерфейса

Любые идеи?

Edit: Вот мой AppDelegate.cs файл:

using Foundation; 
using MvvmCross.Core.ViewModels; 
using MvvmCross.iOS.Platform; 
using MvvmCross.Platform; 
using UIKit; 
using Tjenester.Touch.Util; 

namespace Tjenester.Touch 
{ 
    [Register("AppDelegate")] 
    public partial class AppDelegate : MvxApplicationDelegate 
    { 
     UIWindow _window; 

     public override bool FinishedLaunching(UIApplication app, NSDictionary options) 
     { 
      _window = new UIWindow(UIScreen.MainScreen.Bounds); 
      var setup = new Setup(this, _window); 
      setup.Initialize(); 

      var startup = Mvx.Resolve<IMvxAppStart>(); 
      startup.Start(); 

      _window.MakeKeyAndVisible(); 

      MessageService.Initialize(this); 

      return true; 
     } 
    } 
} 

Вот мой CustomAppStart.cs:

using System; 
using System.Threading.Tasks; 
using Tjenester.Core.Helpers; 
using Tjenester.Core.Services.Authentication; 
using Tjenester.Core.ViewModels; 
using Tjenester.Core.ViewModels.ViewModelParameters; 
using Xamarin.Auth; 
using Tjenester.Core; 
using System.Threading; 
using MvvmCross.Core.ViewModels; 

/// <summary> 
/// Custom Application start procedure to be fed to MvvmCross. 
/// If we already have Username and Password, try login and proceed to the page. 
/// TODO refactor when azure and google are added 
/// </summary> 
public class CustomAppStart : MvxNavigatingObject, IMvxAppStart 
{ 

    public void Start(object hint = null) 
    { 
     ShowViewModel<LoginViewModel>(new LoginPageParameters() {TryLogin = true}); 
    } 
} 

Вот мой Setup.cs:

using UIKit; 
using Tjenester.Core.Helpers; 
using Foundation; 
using Tjenester.Core.Services.Media; 
using Tjenester.Touch.Services; 
using Tjenester.Core.Services.Storage; 
using Tjenester.Core.Services.Scripting; 
using Tjenester.Core; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading; 
using Tjenester.Core.Services.Http; 
using MvvmCross.Core.ViewModels; 
using MvvmCross.iOS.Platform; 
using MvvmCross.Localization; 
using MvvmCross.Platform; 
using MvvmCross.Platform.Platform; 
using MvvmCross.Platform.Plugins; 
using Tjenester.Touch.Services.Http; 
using Tjenester.Touch.Services.Storage; 

namespace Tjenester.Touch 
{ 
    public class Setup : MvxIosSetup 
    { 
     private readonly UIWindow _win; 
     private readonly MvxApplicationDelegate _del; 

     public Setup(MvxApplicationDelegate applicationDelegate, UIWindow window) 
      : base(applicationDelegate, window) 
     { 
      _del = applicationDelegate; 
      _win = window; 
     } 

     protected override IMvxApplication CreateApp() 
     { 
      UIContext.SynchronizationContext = SynchronizationContext.Current; 
      if (NSLocale.PreferredLanguages.Length > 0) { 
       var pref = NSLocale.PreferredLanguages [0]; 
       Settings.Language = pref.Substring (0, 2); 
      } 
      //Mvx.LazyConstructAndRegisterSingleton<IFileUploadService, TouchFileUploadService>(); 
      Mvx.LazyConstructAndRegisterSingleton<IHttpClientFactory, HttpClientFactory>(); 
      Mvx.LazyConstructAndRegisterSingleton<IStorageService, StorageService>(); 
      Mvx.LazyConstructAndRegisterSingleton<IPicturePickerService, TouchPicturePickerService>(); 
      return new Core.App(); 
     } 

     protected override IEnumerable<System.Reflection.Assembly> ValueConverterAssemblies 
     { 
      get 
      { 
       var toReturn = base.ValueConverterAssemblies.ToList(); 
       toReturn.Add(typeof(MvxLanguageConverter).Assembly); 
       return toReturn; 
      } 
     } 

     protected override IMvxPluginConfiguration GetPluginConfiguration(Type plugin) 
     { 
      if (plugin == typeof(Tjenester.Core.Services.Scripting.PluginLoader)) 
      { 
       return new MvxScriptServiceConfiguration() 
        .UseDefaultScriptBindings() 
       ; 
      } 
      return base.GetPluginConfiguration(plugin); 
     } 

     protected override IMvxTrace CreateDebugTrace() 
     { 
      return new MvxDebugTrace(); 
     } 
    } 
} 
+0

Как выглядят ваши методы AppDelegate? Не могли бы вы опубликовать некоторые из наиболее важных методов? – pedrouan

+0

My AppDelegate.cs добавлен сверху. –

+0

Как вы выглядите AppStart? Как выглядит ваша установка? – Cheesebaron

ответ

0

Мог вы пытаетесь инициализировать свой MvxIosViewPresenter вручную, чтобы получить дополнительную информацию?

Таким образом, вы должны использовать следующие строки (ApplicationDelegate.cs):

_window = new UIWindow(UIScreen.MainScreen.Bounds); 
var presenter = new MvxIosViewPresenter(this, _window); 

var setup = new Setup(this, presenter); 
setup.Initialize(); 

var startup = Mvx.Resolve<IMvxAppStart>(); 
startup.Start(); 

var rootViewController = new FirstView(); // You need to have created this ViewController 
_window.RootViewController = rootViewController; 

_window.MakeKeyAndVisible(); 

return true; 

Если это работает для вас, то это означает, что ваша раскадровка не была создана правильно. Ваш FirstViewController, разработанный на вашем раскадровке, не знает о вашей версии кода вашего класса FirstViewViewController, которая реализует MvxViewController.

Хотите, чтобы это было, и посмотрите, как это происходит? Это не изящное решение, но может дать некоторое представление.

+0

Я узнал, что вызывает эту ошибку. Если я сниму «Автомакет» на раскадровке, он загрузится, но, конечно, теперь из пропорций. Может ли быть что-то неправильно с тем, как создается раскадровка, которая вызывает это? –

+0

Звучит очень странно. Пустые начальные экраны с моей стороны обычно заключались в том, чтобы не правильно определять имена классов на представлениях раскадров. –