在文档中写道:
上面的
当我运行代码时,我看到它开始1)资产不是最喜欢的,然后2)请求是最喜欢的,3)资产仍然不是最喜欢的,4)资产仍然不是最喜欢的,5)资产仍然不是最喜欢的。
我做错了什么?为什么我的资产对象没有更新?
然而,在完成处理程序内部(以及完成处理程序之后),我的PHAsset没有发生变化。以下是我用于更改收藏状态的代码,它是从PHAsset文档页面中提取的。在照片运行更改块并调用完成处理程序后,资产的状态反映了您在块中请求的更改。
- (IBAction)touchedButtonFavoritePhoto:(id)sender {
AssetViewController *vc = self.viewControllers[0];
PHAsset *asset = vc.asset;
NSLog(@"touched fav 1: %d", asset.favorite);
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
// Create a change request from the asset to be modified.
PHAssetChangeRequest *request = [PHAssetChangeRequest changeRequestForAsset:asset];
// Set a property of the request to change the asset itself.
request.favorite = !asset.favorite;
NSLog(@"touched fav 2: %d", request.favorite);
} completionHandler:^(BOOL success, NSError *error) {
NSLog(@"Finished updating asset. %@: %d", (success ? @"Success." : error), asset.favorite);
NSLog(@"touched fav 3: %d", asset.favorite);
[self dispatchMainSynchronously:NO usingBlock:^{
[self updateFavoriteButtonForAsset:asset];
NSLog(@"touched fav 4: %d", asset.favorite);
}];
}];
[self dispatchAfter:2.0 usingBlock:^{
NSLog(@"touched fav 5: %d", asset.favorite);
}];
}
上面的
-dispatchAfter:
和-dispatchMain:
函数只是方便函数,调用gcd
函数在一定时间后异步执行块或在主UI线程上执行块。当我运行代码时,我看到它开始1)资产不是最喜欢的,然后2)请求是最喜欢的,3)资产仍然不是最喜欢的,4)资产仍然不是最喜欢的,5)资产仍然不是最喜欢的。
AppName[6155:3741600] startingPage.asset: <PHAsset: 0x1265f1b30> 4DFE1BBF-C16B-4150-8350-3FF1291B63B6/L0/001 mediaType=1/0, sourceType=1, (3264x2447), creationDate=2015-01-19 00:42:26 +0000, location=1, hidden=0, favorite=0
AppName[6155:3741600] touched fav 1: 0
AppName[6155:3741879] touched fav 2: 1
AppName[6155:3741879] Finished updating asset. Success.: 0
AppName[6155:3741879] touched fav 3: 0
AppName[6155:3741600] touched fav 4: 0
AppName[6155:3741600] touched fav 5: 0
我做错了什么?为什么我的资产对象没有更新?
fetchAssetsWithLocalIdentifiers
强制重新获取不起作用 -favorite
状态仍然是旧值。 - Jordan H