मैं आईओएस ऐप्स में कदम उठाने वाली पार्ट-टाइम नोटपैड वेबसाइट कोडर हूं। मुझे पिछले हफ्ते मेरा पहला मैक मिला और मैंने आधे काम करने वाले ऐप को एक साथ जोड़ दिया। अब, SO answer द्वारा आश्वस्त, मैं एमवीसी सीखने की कोशिश कर रहा हूं। मैं बहुत सी सीखने की वक्र पर हूं इसलिए कृपया मेरे साथ भालू।एक्सकोड - क्या यह एमवीसी है?
मैंने एमवीसी, परतों को अलग करने, तीन बक्से और कुछ तीरों पर पढ़ा है, मुझे यह मिल गया है। हालांकि, वास्तविक दुनिया में सिद्धांत का अनुवाद निराशाजनक है। मैंने देखा है कि अधिकांश उदाहरण ऐप्स एमवीसी का उपयोग नहीं करते हैं। ऐप्पल से यह LazyTableImages example भी इस मॉडल के रूप में app delegate
का उपयोग करता है जो मुझे भ्रमित करता है। मैंने इस उत्कृष्ट simple MVC example पर बनाया है।
मेरा ऐप वेब सेवा से स्थान मार्कर पुनर्प्राप्त करता है। मेरे पास एआरसी का उपयोग करके एक टैबड एप्लीकेशन है। मार्करों को प्रदर्शित करने के लिए एक टैब में मैपकिट मानचित्र होता है।
एक साधारण वर्ग एक मार्कर रिकॉर्ड धारण करने के लिए:
@interface MarkerRecord : NSObject
@property (strong, nonatomic) NSDecimalNumber *lat;
@property (strong, nonatomic) NSDecimalNumber *lon;
@property (strong, nonatomic) NSString *des;
एक मॉडल वर्ग, मार्कर वर्गों का एक संग्रह पकड़े, दोनों विचारों की सेवा के लिए।
@interface MarkersModel : NSObject
- (void)getMarkers; // Send HTTP GET to web service to retrieve JSON markers
- (void)postMarker; // Send HTTP POST to web service to INSERT new marker record
और कार्यान्वयन: यह मेरा मॉडल वर्ग ज है
@interface MarkersModel()
@property (strong, nonatomic) NSArray *data;
@end
@implementation MarkersModel
@synthesize data;
- (void)getMarkers
{
// Send HTTP GET to web service to retrieve JSON markers
...
}
- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects
{
// Thanks to Restkit data is an array of Marker classes
data = objects;
// Pass data to controller
}
एक mapViewController वर्ग ज:
#import <MapKit/MapKit.h>
#import "MarkersModel.h"
@interface MapViewController : UIViewController<MKMapViewDelegate> {
MarkersModel *markersModel;
}
@property (nonatomic, strong) IBOutlet MKMapView *mapView;
@end
और कार्यान्वयन:
@interface MapViewController()
@end
@implementation MapViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Create instance of markers model
markersModel = [[MarkersModel alloc] init];
}
-(void)viewWillAppear:(BOOL)animated
{
[markersModel getMarkers];
}
- (void)putMarkersOnMap
{
// To be called by Markers Model
...
}
मेरा मुख्य प्रश्न यहां है:
- क्या मेरा कोड एक सभ्य एमवीसी कार्यान्वयन (शुरुआत) की उपरोक्त रूपरेखा है?
यदि ऐसा है तो:
- कैसे मैं नियंत्रक अद्यतन करने के लिए मॉडल मिलता है (अर्थात मैं कैसे MarkersModel.objectLoader समारोह mapViewController.putMarkersOnMap कॉल करने के लिए मिलता है)?
मुझे दृढ़ता से संदेह है कि उत्तर नियंत्रक पर एक कस्टम प्रतिनिधि है लेकिन मैं अपने जीवन के लिए यह नहीं देख सकता कि इसे कैसे कार्यान्वित किया जाए। मैं अपनी स्थिति में किसी भी उदाहरण से संबंधित नहीं हो सकता। मुझे लगता है कि मैं नियंत्रक पर कुछ इस तरह की जरूरत है:
@class MapViewController;
@protocol MapViewControllerDelegate;
मैं कुछ अतिरिक्त प्रश्न यह पर हूँ जबकि:
- मैं किसी भी झूलने संकेत आएगी - मुझे लगता है कुछ
unsafe_unretained
होना चाहिए (मैं संकलन कर रहा हूँ 4.3 तक)? - क्या मेरे मार्कर नियंत्रक वर्ग में मॉडल घोषणा सही है? मुझे चिंता है कि यह एआरसी द्वारा प्रबंधित नहीं किया जाएगा। मुझे यह भी संदेह है कि यह सार्वजनिक है लेकिन निजी होना चाहिए।
- क्या मार्करमोडेल.getमार्कर विधि स्थिर होनी चाहिए?
मुझे आशा है कि यह स्पष्ट और स्वीकार्य प्रश्न है।आपके धैर्य के लिए धन्यवाद, पोली।
रहना चाहिए यह अच्छा है; प्रतिनिधियों का उपयोग बहुत आम है। यदि आप मॉडल में बदलावों में दिलचस्पी रखने वाले एक से अधिक नियंत्रकों के लिए कोई संभावित क्षमता रखते हैं तो एक विकल्प जिसे आप मूल्यांकन करना चाहते हैं, वह "कुंजी-मूल्य निरीक्षण" है। http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html –
@PhillipMills सहायक लिंक, मैं वास्तव में हाल ही में वास्तव में सुधार करने के तरीके के बारे में बताता हूं मेरे एमवीसी प्रोग्रामिंग, यह वास्तव में मुझे –
महान जानकारी में मदद करनी चाहिए। बहुत बहुत धन्यवाद। – Polly