Cara terbaik menggunakan MVC di iOS

Saya sudah lama bekerja dengan MVC tetapi tidak yakin apakah saya menggunakan pola ini dengan benar di iOS.

Ini adalah pemahaman saya dan kode sumber yang saya gunakan untuk divisi pada tampilan model dan pengontrol.

Keterangan:

  1. Model (misalnya - kelas MyModel) Model ini adalah data saya. Saya menggunakan model untuk perhitungan yang ditentukan, akuisisi data dari Internet dan selanjutnya saya memberi tahu pengontrol tentang perubahan model misalnya melalui NSNotificationCenter.

  2. Pengontrol (misalnya - kelas MyController) Pengontrol dapat langsung menghubungi permintaan data modelnya, dan langsung menuju ke tampilan yang dilihat.

  3. Lihat (misalnya - kelas MyView) Lihat - menampilkan dan mengumpulkan acara dari pengguna. Lihat dapat berinteraksi dengan pengontrol melalui tindakan target dan delegasi.

Kode:

kelas MyModel:NSObject

    .h ... (some header code)
    .m
    Initialization method...

    // method for get data from internet
    -(NSData *)my_getDataFromInternet:(NSURL *)url{
       NSData *data=[NSData dataWithContentsOfURL:url];
       return data;    
    }

kelas MyController:UIVIewController

     #import "MyView.h"
     .h
     MyView * my_view;

     #import "MyData.h"
     .m
     Initialization method...
     - (void)init{
        my_view = [[MyView alloc]init];
        my_view.my_target = self;
        self.view = my_view;
     }

     -(void)mycontrolleraction{
        MyData * my_data = ...
        [my_data my_getDataFromInternet:some_url_image];
        my_view.my_image = [UIImage imageWithData:self.my_data];
     }

kelas MyView:UIView

     .h
     UIImage * my_image;
     property(nonatomic, assign)id my_target;
     .m
     Initialization method...
     - (void)initWithFrame{
         UIButton * my_button = ...
         [button addTarget:my_target ....
         my_image = ...
         [self addSubview:my_image];
         [self addSubview:my_button];
      }

Saya menambahkan target ke tombol saya - target_saya (target_saya - ini adalah Kontroler Saya). Ketika pengguna mengetuk tombol saya - metode dijalankan di MyController dan meminta data dari kelas MyData saya.

Saya ingin tahu di mana kesalahan saya dalam menggunakan metode ini di MVC.


person Matrosov Alexander    schedule 20.08.2011    source sumber


Jawaban (1)


Sepertinya Anda punya ide yang tepat. Saya biasanya menganggap model sebagai sesuatu yang menyimpan data dan juga mengoperasikannya, jadi agak aneh jika model mengambil gambar dan kemudian mengembalikannya tanpa menyimpannya. Memiliki model yang menyimpan data akan membuatnya terhindar dari keharusan mengambilnya lagi nanti, namun cara Anda mendapatkannya tidak salah, dan dari mana data tersebut berasal adalah sesuatu yang sepenuhnya bergantung pada model.

Satu hal yang saya sarankan, tidak terkait dengan MVC, adalah mengikuti konvensi untuk inisialisasi. Metode inisialisasi Anda harus memanggil penginisialisasi superkelas yang ditunjuk, sehingga -init pengontrol Anda akan terlihat seperti:

-(id)init
{
    if ((self = [super init])) {    // double parens to avoid warning about = vs ==
        my_view = [[MyView alloc] init];  // assuming my_view is an ivar
        my_view my_target = self;
    }
    return self;
}

Hal yang sama berlaku untuk kelas tampilan dan model Anda.

person Caleb    schedule 20.08.2011
comment
Ya, saya setuju saya telah melakukan kesalahan dalam inisialisasi. Itu karena saya mengetik semua kode di sini di sebuah situs, bukan di xcode dan sedikit terburu-buru. Saya telah memberikan contoh interaksi sederhana ini hanya untuk menunjukkan adanya interaksi. Ini bukan kode yang ideal - dan contoh sederhana pembagian di MVC. Terima kasih atas komentar Anda dan jawaban atas pertanyaan saya. - person Matrosov Alexander; 20.08.2011