Нераспознанная ошибка селектора при попытке доступа к определенному свойству объекта - PullRequest
2 голосов
/ 25 марта 2012

У меня есть небольшая проблема, возможно, легкая для вас.Я использую основные данные.У меня есть сущность: Session, которая имеет три атрибута: access_token, user_id и secret.

Session.h:

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

@interface Session : NSManagedObject

@property (nonatomic) NSString * access_token;
@property (nonatomic) NSNumber * user_id;
@property (nonatomic) NSString * secret;

@end

Session.m:

#import "Session.h"

@implementation Session

@dynamic access_token;
@dynamic user_id;
@dynamic secret;

@end 

Существует код, в котором я использую эту сущность:

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    Session *newSession = [NSEntityDescription insertNewObjectForEntityForName:@"Session" inManagedObjectContext:managedObjectContext];
    if (newSession != nil) {
        NSLog(@"access_token: %@", [JSON objectForKey:@"access_token"]);
        NSLog(@"user_id: %@", [JSON objectForKey:@"user_id"]);
        NSLog(@"secret: %@", [JSON objectForKey:@"secret"]);
        newSession.access_token = [JSON objectForKey:@"access_token"];
        newSession.user_id = [JSON objectForKey:@"user_id"];
        newSession.secret = [JSON objectForKey:@"secret"];
    }
    NSError *savingError = nil;
    if ([managedObjectContext save:&savingError] == YES) {
        NSLog(@"Session saved");
    } else {
        NSLog(@"Session not saved");
    }
} failure:nil];

Этот код делает исключение:

newSession.secret = [JSON objectForKey:@"secret"];

MyProject[7678:bc03] -[Session setSecret:]: unrecognized selector sent to instance 0x4e572d0

Это NSLog:

2012-03-25 15:17:33.987 MyProject[7730:bc03] access_token: <some_access_token>
2012-03-25 15:17:33.988 MyPriject[7730:bc03] user_id: <some_user_id>
2012-03-25 15:17:33.989 MyProject[7730:bc03] secret: <some_secret>

Это трассировка стека:

*** Call stack at first throw:
(
0   CoreFoundation                      0x010625a9 __exceptionPreprocess + 185
1   libobjc.A.dylib                     0x013e6313 objc_exception_throw + 44
2   CoreFoundation                      0x010640bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3   CoreFoundation                      0x00fd3966 ___forwarding___ + 966
4   CoreFoundation                      0x00fd3522 _CF_forwarding_prep_0 + 50
5   MyProject                           0x00004c94 __42-[APIWrapper authWithLogin:andPassword:]_block_invoke_0 + 836
6   MyProject                           0x0000d452 __74+[AFJSONRequestOperation JSONRequestOperationWithRequest:success:failure:]_block_invoke_0 + 146
7   MyProject                           0x0000e229 __block_global_3 + 41
8   libdispatch_sim.dylib               0x014de289 _dispatch_call_block_and_release + 16
9   libdispatch_sim.dylib               0x014e1833 _dispatch_main_queue_callback_4CF + 312
10  CoreFoundation                      0x00fa1589 __CFRunLoopRun + 2521
11  CoreFoundation                      0x00fa0840 CFRunLoopRunSpecific + 208
12  CoreFoundation                      0x00fa0761 CFRunLoopRunInMode + 97
13  GraphicsServices                    0x0153a1c4 GSEventRunModal + 217
14  GraphicsServices                    0x0153a289 GSEventRun + 115
15  UIKit                               0x000ebc93 UIApplicationMain + 1160
16  MyProject                           0x0001b305 main + 181
17  MyProject                           0x000020d5 start + 53
)

Я действительно не понимаю, в чем проблемаздесь.

1 Ответ

2 голосов
/ 25 марта 2012

В вашем .h файле определите ваши свойства следующим образом.

@property (nonatomic,retain) NSString * access_token;
@property (nonatomic,retain) NSNumber * user_id;
@property (nonatomic,retain) NSString * secret;

А затем в вашем .m файле

@synthesize access_token;
@synthesize user_id;
@synthesize secret;

В основном это управляет вашими геттерами и сеттерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...