//SomeObject.h
#import <Foundation/Foundation.h>


@interface SomeObject : NSObject {

}
@property NSInteger aProperty;
@end

//main.m

#import <Foundation/Foundation.h>
#import "SomeObject.h"

int main (int argc, const char * argv[])
{

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
    [dictionary setObject:[[[SomeObject alloc] init] autorelease] forKey:@"key1"];
    [dictionary setObject:[[[SomeObject alloc] init] autorelease] forKey:@"key2"];
    [dictionary objectForKey:@"key1"].aProperty = 5; //Error HERE
    [dictionary release];

    [pool drain];
    return 0;
}

लेकिन उस लाइन पर एक्सकोड मुझे ये त्रुटियां देता है:

error: Semantic Issue: Member reference type 'struct objc_object *' is a pointer; maybe you meant to use '->'?
error: Semantic Issue: No member named 'aProperty' in 'struct objc_object'

क्या मैं किसी लौटाई गई वस्तु की संपत्ति तक नहीं पहुंच सकता? (मेरा मतलब है, सीधे सेटर विधि को कॉल किए बिना)

0
Michele De Pascalis 29 अगस्त 2011, 14:17
सूचक "*" के साथ चार? मैं नोब हूं लेकिन मैंने इसके साथ तारक के साथ चार कभी नहीं देखा, जैसे आपने "चार * argv []" किया था
 – 
TeaCupApp
29 अगस्त 2011, 14:22
यह लिखने जैसा है char argv[][] या char **argv...यह एक द्वि-आयामी सरणी है, प्रत्येक मानक C मुख्य कमांड लाइन तर्क प्राप्त करने के लिए ऐसी तर्क सूची होनी चाहिए।
 – 
Michele De Pascalis
29 अगस्त 2011, 14:48

1 उत्तर

सबसे बढ़िया उत्तर

आपको लौटाई गई वस्तु को कास्ट करने की आवश्यकता है:

((SomeObject*)[dictionary objectForKey:@"key1"]).aProperty = 5;

या:

[(SomeObject*)[dictionary objectForKey:@"key1"] setAProperty: 5];

या:

SomeObject* obj = [dictionary objectForKey:@"key1"];
obj.aProperty = 5;
1
Felix 29 अगस्त 2011, 16:47
अभी भी सोच रहा था कि मुझे इसे सी ++ में नहीं करना पड़ेगा ... धन्यवाद!
 – 
Michele De Pascalis
29 अगस्त 2011, 14:42
एक क्षण रुकिए, समाधान 1 ((SomeObject*)[dictionary objectForKey:@"key1"]).aProperty = 5; होना चाहिए
 – 
Michele De Pascalis
29 अगस्त 2011, 14:51