在我的应用中,我有一个nsmutablearray,它存储了许多类型的对象。所有这些对象都有两个相似的属性:id,type。
我正在做的是我在1元素数组中获取当前工作对象并访问其属性id,从另一个类中输入。此类不知道哪个类型的对象是当前对象。我该如何访问这个对象?
我尝试过:
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.warning:从不兼容的指针类型初始化
2.warning:无效的接收者类型'id *'
我该如何做这项工作?
提前完成。
答案 0 :(得分:1)
更正您的代码:
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
答案 1 :(得分:0)
通用id
变量通常不会进行指针赋值,因为它已经是指针。所以你应该使用类似的东西:
id anObject = [appDelegate.currentDeailedObject objectAtIndex:0];
您可能希望对commentId
和commentType
使用强制转换,例如(NSNumber *)
等等。