2017-03-29 4 views
1

Xamarin 및 MVVMCross를 처음 사용합니다. 그래서 저는 2 views를 만들었습니다. 로그인 및 등록. 나는 고토 등록보기로 로그인에 버튼이 나는 로그인의 뷰 모델이 코드로 거기에 갈거야 : 그것은 작품을 좋아두 번째보기 객체의 이름 충돌시

// method when user tap register button 
public IMvxCommand NavigateRegister 
{ 
    get { return new MvxCommand(() => ShowViewModel<RegisterViewModel>()); } 
} 

등록 페이지가 잘 열립니다. 하지만 일단 Register 뷰 (텍스트 편집기)에서 단일 개체에 Name을 할당하면 Register 단추를 누르면 응용 프로그램이 충돌합니다.

는 다음 에러 MSG이다

Xamarin.iOS, 수신되지 않은 오브젝티브 -c 예외 : NSUnknownKeyException [ 의 setValue : forUndefinedKey :] :이 클래스는 키 regNameEdit 대한 코딩 호환 키 값 이 아니다.

편집 : 자세한 내용 : 이미 이름 (아래 그림 참조) 할당,하지만 여전히 충돌 : enter image description here

그리고보기는 또한 클래스 '의 createAccount "에 할당되었습니다. 그러나 "public partial class CreateAccount : MvxViewController"줄에 "부분적으로"어둡게 표시된 클래스 선언이 있음을 알게되었습니다. 이 클래스와 첫 번째 클래스에서 유일하게 눈에 띄는 차이가 있습니다.

using MvvmCross.Binding.BindingContext; 
using MvvmCross.iOS.Views; 

namespace MyApp.iOS.Views 
{ 
    public partial class CreateAccount : MvxViewController 
    { 
     public CreateAccount() : base("CreateAccount", null) 
     { 
     } 

     public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 
      // Perform any additional setup after loading the view, typically from a nib. 

      Title = "Register"; 

      var set = this.CreateBindingSet<CreateAccount, Core.ViewModels.CreateAccountModel>(); 
      set.Bind(regNameEdit).To(vm => vm.NameStr); 
     } 

     public override void DidReceiveMemoryWarning() 
     { 
      base.DidReceiveMemoryWarning(); 
      // Release any cached data, images, etc that aren't in use. 
     } 
    } 
} 

바인드 (regNameEdit)

답변

1

이 일반적으로 제어가 당신의 케이스 regNameEdit에서보기 /의 ViewController 클래스에 정의되지 않음을 의미합니다 (아직 텍스트 편집기를 감지하지) 오류가 발생합니다.

이 Edit에 대해 back 속성을 만들고 XIB에 할당 된 클래스가이 속성을 포함하는 클래스인지 확인하십시오.

Xamarin Studio Designer를 사용하는 경우 XIB/StoryBoard에서 UIControl을 선택하고 이름을 설정 한 뒤 속성을 작성한 다음 입력하십시오.

enter image description here

이것은 당신이의 ViewController에서 액세스 할 지정된 이름의 속성을 만들 것입니다.

public override void ViewDidLoad() 
{ 
    base.ViewDidLoad(); 

    this.MyUITextField.Text = string.Empty; 
} 

UPDATE

스토리 보드 사용 : 다음 프로젝트를 청소하고 다시는의 ViewController 클래스에서 이름을 제거 또한 텍스트 필드에서 이름을 제거하고 :

이보십시오. ViewController에 클래스를 다시 추가하십시오. 그러나 하단의 노란색 아이콘을 클릭하면 이름이 입력되고 Enter 키를 누릅니다. 계속해서 TextField를 선택하고 이름을 입력하고 Enter 키를 누릅니다.

업데이트 # 2

당신이 메뉴에서의 ViewController를 만들 때, 자 마린 스튜디오가의 ViewController 클래스와 XIB 파일을 모두 생성합니다 XIBs을 사용하고, 그래서 여기에 다른 하나를 연결합니다 당신 그들을 연결하기 위해 다른 것을 할 필요가 없습니다.

TextField의 경우 이전에 표시된 이름을 추가해야합니다.

시도해보기 : UITextField의 이름을 제거하고 프로젝트를 저장하고 정리/다시 빌드 한 다음 이름을 추가하고 Enter 키를 누릅니다.

문제가 있는지 확인하기 위해 할 수있는 일은 XIB의 버튼을 두 번 클릭하면 ViewController 클래스로 이동하여 메서드를 만들어야합니다.

희망이 도움이됩니다.

+0

안녕하세요. 답변 해 주셔서 감사합니다. 나는 벌써 그것을했다. 그러나 충돌은 아직도 일어난다. 나는 당신이보고 싶다면 내 질문에 더 많은 세부 사항을 추가했다. – GeneCode

+0

@GeneCode가 대답에 대한 자세한 정보를 추가했습니다 ... – apineda

+0

나는 여기에 기본적인 것을 놓치고 있다고 생각합니다. 나는 스토리 보드와 뷰 콘트롤러가 있다는 것을 깨닫지 못했다. 지금은 xib의 모든 것을 디자인합니다. viewcontroller가 firstview.xib에 어떻게 링크되는지 잘 모릅니다. – GeneCode