我是一个绝对的初学者(两周前开始学习编码),所以提前为这个非常基本的问题道歉。我将信息从一种方法传递到另一种方法时遇到了麻烦。
背景:我有一系列短语。我想从数组中获取一个随机短语,在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”不应该返回值。“
答案 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