Доступ к свойствам объекта в nsmutablearray iphone SDK - PullRequest
1 голос
/ 27 июня 2010

В моем приложении у меня есть nsmutablearray, который хранит несколько типов объектов. Все эти объекты имеют два похожих свойства: id, type.

То, что я делаю, - это выбор текущего рабочего объекта в массиве из 1 элемента и доступ к его идентификатору свойств, вводимому из другого класса. Этот класс не знает, какой тип объекта является текущим объектом. Как мне получить доступ к этому объекту?

Я пытался сделать:

commentId = [[appDelegate.currentDeailedObject valueForKey:@"id"] intValue];
commentType = [appDelegate.currentDeailedObject valueForKey:@"type"];

Но это не сработало.

Я создал объект типа id так:

id *anObject = [appDelegate.currentDeailedObject objectAtIndex:0];
commentId = [[anObject valueForKey:@"id"] intValue];
commentType = [anObject valueForKey:@"type"];

Но это показывает мне 2 предупреждения: 1. предупреждение: инициализация из несовместимого типа указателя

2. предупреждение: неверный тип получателя 'id *'

Как мне сделать эту работу?

Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 27 июня 2010

Исправление для вашего кода:

id anObject = [appDelegate.currentDeailedObject objectAtIndex:0];
int commentId = [anObject id];
NSString *commentType = [anObject type];

Обратите внимание на пропущенный «*» после «id» (id уже представляет ссылку) и пропущенный «valueForKey» (это метод внутри NSDictionary, который возвращаетзначение, которое представлено предоставленным ключом).

В общем, этот код должен работать,Но я бы посоветовал вам создать суперкласс или протокол, который будет иметь 2 метода, которые вам нужны (например, «id» и «type»).

Например (суперкласс):

@interface MyComment : NSObject
{
    NSInteger commentId;
    NSString *_commentType;
}

@property (nonatomic) NSInteger commentId;
@property (nonatomic, copy) NSString *commentType;

@end

@implementation MyComment

@synthesize commentId, commentType = _commentType;

- (void)dealloc {
    [_commentType release];

    [super dealloc];
}

@end

// sample use
@interface MyCommentNumberOne : MyComment
{
}
@end

Другой пример (протокол):

@protocol CommentPropertiesProtocol
@required
- (NSInteger)commentId;
- (NSString *)commentType;
@end

// sample use
@interface MyCommentNumberOne : NSObject <CommentPropertiesProtocol>
{
    NSInteger commentId;
    NSString *_commentType;
}
@end

@implementation MyCommentNumberOne

- (NSInteger)commentId {
    return commentId;
}
- (NSString *)commentType {
    return _commentType;
}

- (void)dealloc {
    [_commentType release];

    [super dealloc];
}

@end
0 голосов
/ 27 июня 2010

Общие id переменные обычно не принимают указатель, поскольку он уже является указателем. Поэтому вы должны использовать что-то вроде:

id anObject = [appDelegate.currentDeailedObject objectAtIndex:0];

Возможно, вы захотите использовать приведение для commentId и commentType, например (NSNumber *) и т. Д.

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