2011-06-14 14 views
7

में "अपूर्ण कार्यान्वयन" चेतावनी इस एप्लिकेशन को Cococa and Objective C Up and Running पुस्तक से कोड दोबारा लिखा गया है।एक्सकोड 4.0

जैसा कि मैं शुरुआत में सब कुछ समझने की कोशिश करता हूं, मैं जानना चाहता हूं, जहां मैंने नीचे दिए गए कोड में गलती की थी। मेरे लिए, सब ठीक दिखता है।

Incomplete Implementation 

मैं Photo.m स्रोत कोड फ़ाइल में @implementation Photo लाइन में यह मिल गया:

आप, इसलिए, मुझे चेतावनी के स्रोत की पहचान करने में मदद कर सकता है?

Photo.h

#import <Foundation/Foundation.h> 


@interface Photo : NSObject{ 

    NSString* caption; 
    NSString* photographer;  
} 

+ (Photo*) photo; 

- (NSString*) caption; 
- (NSString*) photographer; 

- (void) setCaption: (NSString*)input; 
- (void) setPhotographer: (NSString*)input; 

@end 

Photo.m

#import "Photo.h" 


@implementation Photo // <- Incomplete Implementation? 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     [self setCaption:@"Default Caption"]; 
     [self setPhotographer:@"Default Photographer"]; 
    } 

    return self; 
} 


+ (Photo*) caption { 
    Photo* newPhoto = [[Photo alloc] init]; 
    return [newPhoto autorelease]; 
} 


- (NSString*) caption { 
    return caption; 
} 


- (NSString*) photographer { 
    return photographer; 
} 


- (void) setCaption:(NSString *)input { 
    [caption autorelease]; 
    caption = [input retain]; 
} 


- (void) setPhotographer: (NSString *)input { 
    [photographer autorelease]; 
    photographer = [input retain]; 
} 


- (void)dealloc 
{ 
    [self setCaption:nil]; 
    [self setPhotographer:nil]; 

    [super dealloc]; 
} 

@end 

मैं हिम तेंदुए 10.6.7 और Xcode 4.0.0 का उपयोग करें।

+0

आपका प्रश्न जल्दी से उत्तर मिला (नीचे देखें), लेकिन एक अलग रूप में के रूप में, वहाँ किसी भी कारण से आप गुण का उपयोग कर रहे है और बजाय अपने चर के लिए @synthesize मैन्युअल कर गेटटर और सेटर? –

+0

@ जेसे: हाय, जेसी। हाँ, आप सही हैं, मेरे प्रश्न को तत्काल उत्तर दिया गया है। बिल्कुल कोई कारण नहीं है। मैंने अभी सीखना शुरू किया * उद्देश्य-सी *। यदि आपके पास बनाने के लिए कुछ भी है मेरा कोड बेहतर है, मैं wil मैं इसे अवशोषित करने के लिए खुश रहो। जैसा कि उद्देश्य-सी के बारे में मेरा ज्ञान बहुत सीमित है, मुझे अनुसरण करना होगा, पुस्तक क्या प्रदान करती है। –

+0

बीमार इसे मेरे जवाब में वास्तविक जल्दी डाल दिया। –

उत्तर

8

इसकी जब तक गलत वर्तनी, अपनी कक्षा विधि + (Photo*) Photo के रूप में परिभाषित किया जाना चाहिए; लागू नहीं है (वहाँ है एक + (Photo*) Caption {} विधि है जो इसकी सिर्फ एक दुर्घटना लग रहा है

संपादित करें:। इस कार्यक्षमता है करने के लिए एक आसान तरीका गुण है, जो एक शॉर्टकट है कि एक के लिए गेटर और सेटर बनाने हैं उपयोग करने के लिए है अपने ज फ़ाइल में

: इसलिए की तरह अपने उदाहरण चर के लिए: हमारे लिए चर, (iPhone 101 एक अच्छा शुरुआत के ट्यूटोरियल के लिए इस लिंक को देख)

@interface Photo : NSObject{ 

    NSString* caption; 
    NSString* photographer;  
} 
@property (nonatomic, retain) NSString *caption; 
@property (nonatomic, retain) NSString *photographer; 
@end 
अपने .m फ़ाइल में

:

+०१२३५१६४१०६
@implementation Photo 
@synthesize caption, photographer; 

    //Other stuff (init and any custom methods for class etc.. NOT getters and setters for variables) 
    - (void)dealloc 
    { 
     [caption release]; 
     [photographer release]; 

     [super dealloc]; 
    } 
+0

+1, हाय जेसी। हाँ, यह मेरी गलती थी। उत्तर देने के लिए आपका धन्यवाद। आप बहुत दयालु हैं। –

+0

इस अतिरिक्त मूल्य के लिए धन्यवाद। क्योंकि, आप देखभाल कर रहे थे और मुझे अतिरिक्त व्यावहारिक सलाह प्रदान की, जो मुझे बेहतर उद्देश्य-सी कोड लिखने में मदद करेगी, मैंने अपने सर्वोत्तम उत्तर के चयन का पुनर्मूल्यांकन किया है। मुझे लगता है, यह अब सबसे अच्छा जवाब है, और इसलिए, मैं इसे _ स्वीकृत उत्तर_ के रूप में चिह्नित कर रहा हूं। –

+0

जैसा कि मैंने देखा, यह अपेक्षा की जाती है कि लगभग हर उद्देश्य-सी प्रॉपर्टी का अपना सेटटर और गेटटर होता है, और उनके सदस्य चर सीधे सेट नहीं होते हैं। –

4

आप क्योंकि आपके हेडर फाइल में इस त्रुटि प्राप्त कर रहे हैं आप ने घोषणा की कि वहाँ एक तरीका होगा:

+ (Photo*) photo; 

लेकिन आप मीटर फ़ाइल में इसे लागू नहीं किया।

संपादित करें:

यह इस तरह दिखता है:

+ (Photo*) caption { 
    Photo* newPhoto = [[Photo alloc] init]; 
    return [newPhoto autorelease]; 
} 

होना चाहिए:

+ (Photo*) photo { 
    Photo* newPhoto = [[Photo alloc] init]; 
    return [newPhoto autorelease]; 
} 
+0

+1 और आपको भी धन्यवाद। मैंने इसे अनदेखा कर दिया है, क्योंकि मेरे लिए कई चीजें नई हैं। मैंने विजुअल स्टूडियो और विजुअल सी ++ से स्विच किया, और यह एक्सकोड पर मेरा दूसरा दिन है। आपने मदद की। –

2

आप +photo याद कर रहे हैं क्योंकि आप गलती से caption टाइप किया:

+ (Photo*) caption { 
    Photo* newPhoto = [[Photo alloc] init]; 
    return [newPhoto autorelease]; 
} 

+ (Photo*) photo { 
    Photo* newPhoto = [[Photo alloc] init]; 
    return [newPhoto autorelease]; 
} 
+0

+1, हाय जेरेमी, और आपको बहुत धन्यवाद। आपने वास्तव में मेरी मदद की, और आपका जवाब वस्तुतः तत्काल था। :-) –

1

आपका।एम फ़ाइल के लिए कार्यान्वयन नहीं है:

+ (Photo*) photo; 

यह गुम विधि है।

+0

+1, हाय मिहिर। मैं उस रेखा को देख रहा था। आपका बहुत बहुत धन्यवाद। –

1

बदलने का प्रयास करें

+ (Photo*) caption { 
    Photo* newPhoto = [[Photo alloc] init]; 
    return [newPhoto autorelease]; 
} 

+ (Photo*) photo { 
    Photo* newPhoto = [[Photo alloc] init]; 
    return [newPhoto autorelease]; 
} 
+0

+1 -hi, यह होना चाहिए। आपका बहुत बहुत धन्यवाद। –

4

सामान्य तौर पर, जब आप चेतावनी पर माउस, यह आप कौन सी विधि यह याद आ रही है बता नहीं होगा, लेकिन वहाँ कम से कम दो अन्य तरीके हैं करने के लिए यह जानकारी प्राप्त करने:

  1. प्रकार Cmd-4 या अंक नेविगेटर दृश्य (एक त्रिकोण आइकन में!), तो पूर्व चयन इस मुद्दे के लिए "अर्थपूर्ण अंक" चेतावनी पंड करें। इसके बाद आपको "विधि परिभाषा" के प्रभाव के लिए एक संदेश दिखाई देगा।

  2. टाइप सीएमडी -7 या लॉग व्यू का चयन करें (सही आइकन जो कैप्शन बबल जैसा दिखता है), फिर उचित समस्या का चयन करें सूची से। आप एक ही संदेश देखेंगे।