gpt4 book ai didi

iphone - Objective-C : __block variables

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:33:14 24 4
gpt4 key购买 nike

是否可以为局部变量分配一个范围在 block 外的值并保留其值?特别是,我正在为 iOS 编码,我在另一个 block 内有一个嵌套 block ,我想在 block 内为 NSString 分配一个值,然后(在 block 外)使用它。当我在 block 之后引用 NSString 时,我尝试使用 __block nut 我得到一个错误的访问错误。我正在使用 ARC,这很重要。例如:

__block NSString *str;

someBlock ^(id param1)
{
str = @"iPhone";
}

[str getCharAtIndex:1]; //or w/e

我是不是在做一些概念上的错误,或者这是不允许的,或者是什么?非常感谢您的帮助。

编辑:

这是实际代码,基本上代码将推文作为 json 对象获取,然后我要做的就是显示文本。在代码中我没有从 json 中提取文本,我试图做一个概念验证

- (IBAction)getTweet:(id)sender
{
__block NSString *displayStr;

//account instance
ACAccountStore *store = [[ACAccountStore alloc] init];
ACAccountType *twitterAcountType =
[store accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierTwitter];

//request access
[store requestAccessToAccountsWithType: twitterAcountType withCompletionHandler:
^(BOOL granted, NSError *error)
{
if (!granted) {
//display error on textView
}
else
{
//get available accounts
NSArray *twitterAccounts = [store accountsWithAccountType: twitterAcountType];

if([twitterAccounts count] > 0)
{
//get first account
ACAccount *account = [twitterAccounts objectAtIndex: 0];

////make authenticated request to twitter
//set-up params
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:@"1" forKey:@"include_entities"];
[params setObject:@"1" forKey:@"count"];

//which REST thing to call
NSURL *url =
[NSURL URLWithString:@"http://api.twitter.com/1/statuses/home_timeline.json"];

//create request
TWRequest *request =
[[TWRequest alloc]
initWithURL:url parameters:params requestMethod:TWRequestMethodGET];

//attach account info
[request setAccount: account];
[request performRequestWithHandler:
^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
{
if(error != nil)
{
//display error
}
else
{
NSError *jsonError;
NSArray *timeline =
[NSJSONSerialization
JSONObjectWithData: responseData
options: NSJSONReadingMutableLeaves
error: &jsonError];

if (jsonError == nil)
{
///////////////////////////
///heres the src of error//
///////////////////////////
//display data
NSLog(@"array: %@", timeline);
displayStr = @"whats the deal with this";

//i tried this but i think ARC takes care of this
[displayStr retain];
}
else
{
//display error
}
}

}];//end block de request
}
else
{
//display error
}
}
}];//end block de store

///////then heres where i get the bad access error
[self.lastTweetText setText:displayStr];


}//end getTweet

也感谢大家的帮助

最佳答案

您只是在定义该 block ,而不是执行它。调用 someBlock(valueForParam1); 来执行你的 block 。否则你的 str 指针指向一些垃圾并且调用 getCharAtIndex: 会使你的应用程序崩溃。

关于iphone - Objective-C : __block variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8878358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com