开发者社区> 问答> 正文

NSString 作为参数传到另外个类的函数里报错

ValueObject

#import <Foundation/Foundation.h>

@interface CurrentDataVO : NSObject

@property (nonatomic, retain) NSString *crt;
@property (nonatomic, retain) NSString *last;
@property (nonatomic, retain) NSString *dataType;
@property (nonatomic, retain) NSString *date;
@property (nonatomic, retain) NSMutableArray *days;
@property (nonatomic, retain) NSString *cv;

- (void)showAllData;

#import "CurrentDataVO.h"

@implementation CurrentDataVO

@synthesize crt;
@synthesize last;
@synthesize dataType;
@synthesize date;
@synthesize days;
@synthesize cv;

- (id)init
{
    self = [super init];
    if (self) {
        days = [[NSMutableArray alloc] init];
    }
    return self;
}

- (void)showAllData
{
    NSLog(@"%@", crt);
    NSLog(@"%@", last);
    NSLog(@"%@", dataType);
    NSLog(@"%@", date);
    NSLog(@"%@", cv);
    NSLog(@"%@", days);
}

@end
ViewCtrlA

[cell setContentData:todayData withYesData:vo.last];
ViewCtrlB

- (void)setContentData:(NSString *)todayData withYesData:(NSString *)yesData
{
    [todayDataLabel setText:todayData];
    [yesDataLabel setText:yesData];
}
cell不为nil
在ViewCtrlB中 NSlog 能打印出 todayData,但是赋值到setText中时会抛出异常。

2012-12-13 14:10:35.510 mbaforios[29723:fb03] 1005
2012-12-13 14:10:35.511 mbaforios[29723:fb03] -[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x6b904e0
2012-12-13 14:10:35.511 mbaforios[29723:fb03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x6b904e0'
*** First throw call stack:
(0x12f1022 0x17a2cd6 0x12f2cbd 0x1257ed0 0x1257cb2 0x46a0ff 0x7abd 0x440c 0x93d9 0xd2da49 0xd2be84 0xd2cea7 0xd2be3f 0xd2bfc5 0xc70f5a 0x1a52a39 0x1b1f596 0x1b1f861 0x1a49120 0x1b1f117 0x1a48fbf 0x12c594f 0x1228b43 0x1228424 0x1227d84 0x1227c9b 0x1fab7d8 0x1fab88a 0x32a626 0x2ad2 0x2a45)
terminate called throwing an exception(lldb)

展开
收起
a123456678 2016-07-19 17:11:05 2317 0
2 条回答
写回答
取消 提交回答
  • 说明参数类型不对,注意,Objective-C里面必须传指针 NSString*,而不是直接NSString
    2019-07-17 19:58:36
    赞同 展开评论 打赏
  • 因为NSString字符串是autorelease的,在多层方法传递赋值时会在中间某一层传递中释放掉。

    分割线
    我说NSString是autorelease这个是错误的,NSString *str = @"123",这样得到的字符串是字符串常量,并非autorelease。
    这个是不对的,本意是表达在参数传递过程中NSString *str = obj;这样得到的str是autorelease的。

    题外话:
    immutable value 尽量使用copy属性

    2019-07-17 19:58:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多