2012-08-07 47 views
0

所以我有一个NSString,我想能够在另一个类访问。在我RootViewController.h我:分配到'只读'返回结果...全球NSString

@interface RootViewController : UITableViewController 

+(NSMutableString*)MY_STR; 

@property (nonatomic, readwrite, retain) NSString *MY_STR; 

@end 

在我RootViewController.m:

static NSString* MY_STR; 

@synthesize MY_STR; 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    //The NSDictionary and NSArray items (listOfItems, etc.) are called at top so don't worry about them 

    NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section]; 
    NSArray *array = [dictionary objectForKey:@"MovieTitles"]; 
    MY_STR = [array objectAtIndex:indexPath.row]; 

} 

+(NSString*)MY_STR{ 
    return MY_STR; 
} 

- (void)dealloc { 
    [MY_STR release]; 
    [super dealloc]; 
} 

现在我NewViewController类我想要写的NSString MY_STR所以在我的.m我有:

#import "RootViewController.h" 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section]; 
    NSArray *array = [dictionary objectForKey:@"MovieTitles"]; 
    [RootViewController MY_STR] = [array objectAtIndex:indexPath.row]; 
} 

但在这条线:

[RootViewController MY_STR] = [array objectAtIndex:indexPath.row]; 

我收到此错误: “分配到一个Objective-C的消息不允许‘只读’返回结果”

任何帮助将是真棒谢谢!

+0

可能的重复[分配给'只读'返回结果不允许,但属性被声明为'读写'](http://stackoverflow.com/questions/10303508/assigning-to-readonly-return-result-not-允许 - 但是财产 - 被宣布 - rea) – Hemang 2014-07-05 10:08:19

回答

0

属性名称需要以小写字母开头。按照惯例,所有的大写名称都是“#定义”。尝试使用“myStr”。

所以这条线是您的问题:

[RootViewController的MY_STR] = [阵列objectAtIndex:indexPath.row];

左侧只是返回一个不是左值的值。你需要做的就是添加

+(void) setMyStr:(NSString*)str 
{ 
    myStr = str; // assumes ARC 
} 

然后

[RootViewController setMyStr:[array objectAtIndex:indexPath.row]]; 

您可能没有得到以键值编码或性能还,但方便的ObjectiveC使用的命名惯例做这些。所有的ivars应该以小写字母开头,原因是setter使用变量名,首字母大写,前缀为“set”。因此,使用“myStr”作为变量名称(好的CamelCase例子,同样是Apple的方式),你有一个setMyStr:setter。现在,就你的情况而言,你只能在课堂上使用这两种方法,你可以真正使用你想要的任何方法名称 - 但是它很好的实践。当你使用属性,并让编译器为你合成getter和setter时,它将看起来完全如上所示。

+0

谢谢大卫。尽管如此。它指向错误的“=”,但我认为你和其他人已经明白这一点。 – Encephalon 2012-08-07 22:51:49

+0

好吧,我将它添加到我的RootViewController中: +(void)setMyStr:(NSString *)str { myStr = str;然后在我的NewViewController中改为: [ 现在我得到了这个警告: “Class method'+ setMYSTr:'not found(返回类型默认为'id')” – Encephalon 2012-08-07 23:08:35

+0

检查您的拼写(也是我的) - 使用CamelCase,Apple方式 - myStr - 只有第二个短语(和其他)被大写。如果拼写正确,我保证该方法可行!所以getter是 - (NSString *)myStr;并且setter是+(void)setMyStr:(NSString *)val; – 2012-08-07 23:17:50