我正在尝试Dictionary<string, string>在我正在为ASP.NET 2.0开发的自定义控件的ViewState中存储一个:
private Dictionary<String, String> Items
{
get
{
object d = ViewState["Items"];
return (d == null ? null : (Dictionary<String, String>)d);
}
set
{
ViewState["Items"] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
访问它看起来像这样:
public void UpdateData
{
if (this.Items == null)
this.Items = new Dictionary<string, string>();
else
this.Items.Clear();
//Fill the collection
}
Run Code Online (Sandbox Code Playgroud)
当第一次加载页面时设置它,它似乎工作正常.但是在随后的回发中,返回的值始终为null(第一个条件总是发生).调试显示它已null退出属性中的ViewState get.
我做了一些研究,发现类必须实现IStateManager为可以在ViewState中保存,而字典MSDN页面似乎表明Dictionary<TKey, TValue>没有.但我之前在ViewState中存储了字典没有问题.这里发生了什么?我以前的经历是侥幸吗?
更新:我尝试在属性中添加一些测试代码:ViewState["ItemTest"] = "foo";在set和string test = (string)ViewState["ItemTest"];中 …
我有一个使用的iPad应用程序UICollectionView.在iOS 8,当装置旋转时,在viewWillTransitionToSize我的主视图控制器,我请animateAlongsideTransition的id<UIViewControllerTransitionCoordinator>参数和动画帧改变在主视图中,其中一个包含的集合视图各种视图.
在iOS 7中,我用来willRotateToInterfaceOrientation:duration:通过[UIView animateWithDuration:delay:options:animations:completion:]调用来动画帧更改.我UIViewAnimationOptionLayoutSubviews作为options参数传递,并且集合视图在调整大小时动画化其项目的重新布局.但是在iOS 8上animateAlongsideTransition,只有最顶层的视图才能生成动画; 它的所有子视图,包括集合视图及其单元格,都只是闪烁到新的大小/帧.
我的问题:我该如何使用或达到的效果UIViewAnimationOptionLayoutSubviews使用[animateAlongsideTransition]?
说我这样做:
[self.collectionView setCollectionViewLayout:myNewLayout animated:YES];
Run Code Online (Sandbox Code Playgroud)
动画的持续时间是多少?
我的应用是,当这种情况发生变化时,我会在单元格中设置图层属性,并且由于图层动画不会被UIView基于块的动画捕获,我必须使用自己的动画块单独进行.
WebKit的快速点击功能已经在iOS 9.3中用于Safari(参见文档).我在一个使用Web视图显示文本的电子阅读器应用程序上工作.我们仍然使用UIWebView,因为各种 错误的WKWebView,但我可以切换出去WKWebView很容易用于测试目的.我们拥有自己的自定义触控功能,可以延长350毫秒的触控延迟,让链接感觉更快.我刚尝试了快速点击的东西,它似乎只能工作WKWebView.这是正确/确认/记录在某处吗?还是应该在这两个快速水龙头工作UIWebView和WKWebView?
更新: 这是一篇关于iOS 8当前快速点击行为的一些变化的文章,该行为仅出现在WKWebView.但没有关于新的iOS 9.3的东西.
我刚刚在Xcode 8中设置我的项目以使用新的自动配置.我正在尝试我的命令行构建(使用xcodebuild构建.xcarchive和.ipa文件类似这样).但是,对于我在Xcode 8中实际未打开的每个项目,命令行存档都会因无效的配置而失败.当我在Xcode 8中打开项目并转到项目编辑器的"常规"选项卡时,它会在代码签名部分中显示一个微调器,并说明生成配置文件,然后显示一切准备就绪.然后我又跑xcodebuild了,效果很好.
我的问题:有没有办法从命令行触发自动生成/设置魔术?
viewDidLoad在获取使用的数据后,将其调用。如果未更改任何数据,则在进行一些打印调试后,它似乎将调用所有适当的delegeate方法。如果某些数据已更改,cellForItemAt则不会调用。
重新加载整个部分效果很好。但是给我一个不需要的动画。尝试UIView在重新加载之前禁用动画,并在重新加载之后启用动画,但是仍然给了我一点动画。
collectionView.reloadSections(IndexSet(integer: 0))
Run Code Online (Sandbox Code Playgroud)
这是我当前的情况,当使用reloadData()时
UICollectionViewController是TabBarController的一部分。我正在使用自定义UICollectionViewCells。数据是从CoreData加载的。
第一次打开标签页,它可以正常工作。在另一个选项卡中更新收藏夹项并返回此collectionView之后,其未更新。但是,如果我选择另一个选项卡,然后返回到该选项卡,则它已更新。
var favorites = [Item]()
override func viewWillAppear(_ animated: Bool) {
collectionView!.register(UINib.init(nibName: reuseIdentifier, bundle: nil), forCellWithReuseIdentifier: reuseIdentifier)
if let flowLayout = collectionView!.collectionViewLayout as? UICollectionViewFlowLayout {
flowLayout.estimatedItemSize = CGSize(width: 1,height: 1)
}
loadFavorites()
}
func loadFavorites() {
do {
print("Load Favorites")
let fetch: NSFetchRequest = Item.fetchRequest()
let predicate = NSPredicate(format: "favorite == %@", NSNumber(value: true))
fetch.predicate = predicate
favorites = try managedObjectContext.fetch(fetch)
if favorites.count > 0 {
print("Favorites count: \(favorites.count)") …Run Code Online (Sandbox Code Playgroud) 我正在尝试用于AVAssetDownloadTask离线下载和播放 FairPlay 加密的音频内容。我不断收到这样的错误urlSession:task:didCompleteWithError::
错误域=AVFoundationErrorDomain代码=-11863“操作已停止”UserInfo={NSLocalizedFailureReason=此内容不再可用。,NSLocalizedDescription=操作已停止}
我的流程是:
AVURLAsset使用如下 URL创建一个https://my.cdn.com/playlist.m3u8AVPlayerItemAVAssetResourceLoaderDelegate,查找以方案开头的 URL skd,下载 CKC,获取可持久形式,然后将其返回给资源加载器请求所有这些都有效,并且以与 Apple 的HLSCatalog 示例代码中相同的方式完成。但下载时仍然会出现上述错误,即使将相同的播放列表和关键 URL 插入示例代码中也可以正常下载。
我最终发现,AVAssetDownloadTask只会下载一个已经流式传输并给出解密密钥(通过)并且不与播放器关联的AVURLAsset 实例。AVAssetResourceLoaderDelegate我不能只是AVURLAsset使用与已经播放的内容相同的 URL 创建一个新内容并下载它。所以看来,为了下载任意 FairPlay 内容,我必须:
AVURLAssetAVPlayer并将其音量设置为0但这看起来很可怕。这不可能是真的。
所以,我的问题是:如何下载 FairPlay 加密的 AVURLAsset,而不需要之前流式传输该特定实例?
我正在开发一个 iOS 应用程序,它通过 HLS 播放 FairPlay 加密的音频,并支持下载和流式传输。在飞行模式下,我无法播放下载的内容。如果我AVURLAsset在下载完成时从本地 URL创建一个,asset.assetCache.isPlayableOffline返回NO,并且当我尝试以飞行模式播放时,它仍然尝试请求 .m3u8 播放列表文件之一。
我的主播放列表如下所示:
#EXTM3U
# Created with Bento4 mp4-hls.py version 1.1.0r623
#EXT-X-VERSION:5
#EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,URI="skd://url/to/key?KID=foobar",KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1"
# Media Playlists
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=133781,BANDWIDTH=134685,CODECS="mp4a.40.2" media-1/stream.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=67526,BANDWIDTH=67854,CODECS="mp4a.40.2" media-2/stream.m3u8
Run Code Online (Sandbox Code Playgroud)
流播放列表如下所示:
#EXTM3U
#EXT-X-VERSION:5
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:30
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="skd://url/to/key?KID=foobar",KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1"
#EXTINF:30.000181,
#EXT-X-BYTERANGE:470290@0
media.aac
# more segments...
#EXT-X-ENDLIST
Run Code Online (Sandbox Code Playgroud)
下载资产:
AVURLAsset *asset = [AVURLAsset assetWithURL:myM3u8Url];
[asset.resourceLoader setDelegate:[FairPlayKeyManager instance] queue:[FairPlayKeyManager queue]];
asset.resourceLoader.preloadsEligibleContentKeys = YES;
AVAssetDownloadTask *task = [self.session assetDownloadTaskWithURLAsset:asset assetTitle:@"Track" assetArtworkData:imgData options:nil];
[task resume];
Run Code Online (Sandbox Code Playgroud)
在代表的URLSession:assetDownloadTask:didFinishDownloadingToURL::
self.downloadedPath = location.relativePath;
Run Code Online (Sandbox Code Playgroud)
在代表的URLSession:task:didCompleteWithError: …
avfoundation fairplay http-live-streaming avasset avassetdownloadtask
我有一个应用程序可以流式传输受 FairPlay DRM 保护的音频。它最初AVAssetResourceLoaderDelegate用于交付 FairPlay 密钥,但现在我将其更新为AVContentKeySession用于iOS 11.2 及更高版本。附注:如果你想做到这一点,在缺少文档感到沮丧,有一个在示例代码“FairPlay的流媒体服务器SDK(4.2.0)”链接在这里。
我的每个音频产品都被分成了许多曲目。当我打开一个音频产品时,我通过AVQueuePlayer. 这些轨道中的每一个都会生成一个对 FairPlay 密钥的请求。在没有已下载的持久密钥的情况下,这些请求中的每一个都进入密钥服务器,下载密钥,生成持久密钥并保存它。每个轨道都有相同的密钥,因此它们最终都具有相同的持久密钥数据,并且每个轨道都覆盖最后一个以完成。
因为我的密钥服务器的成本取决于我发出的密钥请求的数量,所以我希望只有第一个请求实际到达密钥服务器,随后的请求使用持久密钥。但是用于将 SPC 数据传递给密钥服务器的方法makeStreamingContentKeyRequestDataForApp使用异步完成块。onAVAssetResourceLoadingRequest的等效方法是同步的。
我的问题:使用信号量强制此调用同步是否安全?像这样:
-(void)handleOnlineRequest:(AVContentKeyRequest *)req
NSData *appCert = [self _getAppCertData];
NSData *assetId = [self _kidFromRequest:req];
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
[req makeStreamingContentKeyRequestDataForApp:appCert
contentIdentifier:assetId
options:nil
completion:^
NSData *contentKeyRequestData, NSError *error)
{
//request key data and respond to request
dispatch_semaphore_signal(sema);
}];
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(semaphore);
Run Code Online (Sandbox Code Playgroud)
下载以前未流式传输的音频时,效果尤其明显。使用 AVAssetDownloadTask 下载音频的速度非常慢,所以我一次启动很多,每个都会生成一个密钥请求。
苹果发布新的字体,纽约,与iOS 13.是否有可能将其设置在CSS的网页内容,就像使用-apple-system旧金山?