在Objective-C中的方法之间传递信息

时间:2014-01-10 07:24:15

标签: ios objective-c

我是一个绝对的初学者(两周前开始学习编码),所以提前为这个非常基本的问题道歉。我将信息从一种方法传递到另一种方法时遇到了麻烦。

背景:我有一系列短语。我想从数组中获取一个随机短语,在UI中显示它,并在共享表中提供相同的短语。 当点击按钮时,我可以在UI中正确检索和显示随机短语(从另一个类调用我的“randomPhrase”方法)。这很好。

问题:我无法将短语“currentPhrase”传递给Share Sheet方法。如何使此currentPhrase可用于外部方法。我正在使用ARC。

// Call the randomPhrase method and keep the output as a string called currentPhrase (this line works)
- (IBAction)phraseButtonTapped {
NSString *currentPhrase = [self.otherFile randomPhrase];


// Display the currentPhrase string in the UIlabel (this line works)
self.phraseLabel.text = currentPhrase;  


// Output to log for checking (this line works)
NSLog(@"current content is %@", currentPhrase);          
}


// Now for the Share Sheet. I could do this below, but text doesn’t match the UI phrase.
// NSString *shareText = [self.otherFile randomPhrase];
// NSArray *itemsToShare = @[shareText];


// So, here I’m trying to populate the current phrase into the share sheet. (this doesn’t work).
- (IBAction)showActivityView:(id)sender {      
NSArray *itemsToShare = @[_currentPhrase];


// Make the share sheet (this works from here onwards if I use a test hardcoded string)
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil];


// Show the share sheet view (this works from here onwards if I use a test hardcoded string)
[self presentViewController:activityVC animated:YES completion:nil]; 
}

注意: 我尝试在第一种方法中使用“return currentPhrase;”,但我得到“Void方法”,“shortButtonTapped”不应该返回值。“

3 个答案:

答案 0 :(得分:0)

如果在phraseButtonTapped之前调用showActivityView:(或者如果它无关紧要,您只想在phraseLabel中使用showActivityView:的文本,无论它是什么),然后您可以在self.phraseLabel.text内使用showActivityView:,这样可以有效地将该信息传递给该方法

所以试试

NSArray *itemsToShare = @[self.phraseLabel.text];

答案 1 :(得分:0)

问题是范围之一。您点按一个按钮即可获取短语,并将此值存储在 local 变量中。这意味着您只能在该方法中访问此值。

其他人建议从标签文本中读取值,但这不是最佳实践。如果你正在学习,你也可以正确地学习。

希望您听说过模型 - 视图 - 控制器,这是用于iOS应用的标准模式。您拥有的应用程序就是一个很好的例子,除了您缺少模型部分。

控制器是您的视图控制器对象。 视图是显示短语的标签。在您的情况下,模型应该是视图控制器上的NSString属性。

不是将短语存储在局部变量中,而是将其存储在属性中。然后它将可用于共享方法。

答案 2 :(得分:-1)

如果您想将“SOME THING”传递给某个方法,请尝试使用以下语法

//declaration
-(id) functionA:( NSArray*) myArray {

}

// function call
[self functionA : myArrayData];  // myArrayData is declared somewhere else