有没有办法在使用MPMoviePlayerController时捕获异常(特别是网络错误/无可用连接)?
我特别担心的是,一旦播放器的实例初始化,initWithURL:您无法知道电影加载是否由于某种原因而失败.
我已经查看了可用的文档,并意识到我可以通过获取loadState更改的通知
moviePlayerLoadStateChanged:(NSNotification*)notification.
Run Code Online (Sandbox Code Playgroud)
问题是可用的loadState常量不适合错误处理:
MPMovieLoadStateUnknown
MPMovieLoadStatePlayable
MPMovieLoadStatePlaythroughOK
MPMovieLoadStateStalled
Run Code Online (Sandbox Code Playgroud)
(如果你想知道,MPMovieLoadStateStalled由于某些原因在网络错误期间没有调用它?)
有一个不推荐使用的MPMoviePlayerContentPreloadDidFinishNotification用户提供了一个带有"错误"键的userInfo字典,但是没有适用于iOS 3.2及更高版本的内容.
任何帮助将非常感谢.
我遇到了一个奇怪的滚动问题,我希望有人可以帮助我找出为什么会发生这种情况.
我已经包含了我认为与问题相关的代码部分,但很高兴用其他任何需要更新这篇文章.
我在tableview的内容插入区域中实现了一个pull to refresh视图.刷新会触发Async NSURLConnection,它从Web服务器提取数据,解析相关信息并根据需要刷新表.
这是刷新过程开始的地方:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
if (scrollView.contentOffset.y <= - 65.0f && !self.reloading) {
self.reloading = YES;
[self reloadTableViewDataSource];
[refreshHeaderView setState:EGOOPullRefreshLoading];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.2];
self.tableView.contentInset = UIEdgeInsetsMake(60.0f, 0.0f, 0.0f, 0.0f);
[UIView commitAnimations];
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,如果我开始滚动,而内容插入是"可见的"(即重新加载期间)我得到这种奇怪的行为,我的表格部分不会一直滚动到顶部 - 请参见截图,以清楚地看到我正在尝试在这里描述.
我在下面列了几个屏幕截图,清楚地标明了目前正在发生的事情.
有谁之前经历过这个吗?关于我应该尝试修复它的任何想法?
非常感谢Rog

如果我开始滚动表格,这就是结果.图像顶部的橙色位是实际的导航栏,我期望表格部分(2010年12月1日).

这可能是一个愚蠢的问题,一旦指出解决方案,让你觉得很愚蠢想知道你怎么没看到它但我无法弄清楚为什么我的应用程序的这部分与EXC_BAD_ACCESS崩溃(并且没有堆栈跟踪).
viewDidLoad如果启用了locationServices ,我将创建一个CLLocationManager*locationManager(在接口文件中声明的ivar):
- (void)viewDidLoad
{
[super viewDidLoad];
if ([CLLocationManager locationServicesEnabled])
[self findUserLocation];
...
}
#pragma mark - Location finder methods
- (void)findUserLocation
{
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
[locationManager startUpdatingLocation];
}
Run Code Online (Sandbox Code Playgroud)
所以位置管理器开始更新位置,每次都找到更新,调用下面的委托方法,在那里我检查是否应该超时或继续寻找我想要的准确度:
#pragma mark - CLLocationManager delegates
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
if ([newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp] > 8)
[self locationManagerTimeOut];
else if ((newLocation.horizontalAccuracy <= manager.desiredAccuracy) && (newLocation.verticalAccuracy <= manager.desiredAccuracy))
[self locationManagerLockedPosition];
}
Run Code Online (Sandbox Code Playgroud)
如果某个位置被锁定,则调用此方法:
- (void)locationManagerLockedPosition
{
[locationManager stopUpdatingLocation]; …Run Code Online (Sandbox Code Playgroud) 我正在为客户开发一个iPhone应用程序.除此之外,该应用程序将允许用户浏览和下订单特定(有形)产品.
客户有一个目前做类似事情的网站,由于预算有限以及网站运行在他们无法控制的第三方专有平台上,我们正在研究构建网络服务的可能替代方案.
在网站上,用户注册和身份验证以及订单放置是通过安全HTTP的POST请求完成的.响应始终是格式化的HTML页面,其中包含指示请求是否成功的字符串,以及是否存在错误,错误是什么等.
因此,如果我可以在手机上复制POST请求,并解析HTML响应以读取每个请求的结果,您认为这是构建Web服务来处理此问题的可接受的替代方法吗?
除了页面更改的可能性(我们可以管理)以及我可能必须下载并解析相对较大的HTML响应这一事实之外,此解决方案还有其他任何缺点吗?还有什么我可能会遗漏的吗?
非常感谢你的想法.干杯,罗格
我的应用程序有一个问题,它采用XML提要,解析它,并将结果存储到Core Data中.
问题仅发生在应用程序的第一次运行时,当商店中没有任何内容并且整个订阅源被解析和存储时.问题只是内存分配累积起来,直到50%的尝试崩溃应用程序,通常大约10Mb.分配的对象似乎是CFData(存储)对象,我似乎无法找到任何强制释放它们的方法.如果你可以让它运行一次并成功完成解析并保存到核心数据,那么每次后续启动都没问题,内存使用量永远不会超过2.5Mb
这是我们进入代码之前的一般方法:将feed添加到NSData对象中.使用NSFileManager将其存储为文件.从文件路径创建URL并将其提供给parseXMLFile:方法.代表是自我.在到达解析器时:didStartElement:namespaceURI:qualifiedName:attributes:我创建一个字典来捕获我需要的标签中的数据.解析器:foundCharacters:方法将标记的内容保存到字符串解析器:didEndElement:...方法然后确定标记是否是我们需要的东西.如果是这样的话,它会将它添加到字典中,否则它会忽略它.一旦它到达项目的末尾,它就会调用一种方法将其添加到核心数据存储中.
通过查看示例代码和其他人发布的帖子,似乎一般方法中没有任何错误.
代码如下,它来自视图控制器的更大上下文,但我省略了任何不直接相关的内容.
就我已经尝试的事情而言:feed是XML,没有转换为JSON的选项,抱歉.这不是在共享文档区域中找到并存储的图像.
关于它可能是什么的线索:这是我从Instruments获得的最大数量最多的东西(每件256k):
对象地址类别创建时间实时大小负责图书馆负责人
1 0xd710000 CFData(store)16024774912•262144 CFNetwork URLConnectionClient :: clientDidReceiveData( _CFData const*,URLConnectionClient :: ClientConnectionEventQueue*)
这是代码,为内容的匿名编辑;)
-(void)parserDidStartDocument:(NSXMLParser *)feedParser { }
-(void)parserDidEndDocument:(NSXMLParser *)feedParser { }
-(void)parser:(NSXMLParser *)feedParser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
eachElement = elementName;
if ( [eachElement isEqualToString:@"item" ] )
{
//create a dictionary to store each item from the XML feed
self.currentItem = [[[NSMutableDictionary alloc] init] autorelease];
}
}
-(void)parser:(NSXMLParser *)feedParser foundCharacters:(NSString *)feedString
{
//Make sure that tag content doesn't …Run Code Online (Sandbox Code Playgroud) 可能重复:
UIAlertView未显示消息文本
我试图在横向模式下为应用程序创建一个简单的UIAlertView,但我看到的只是标题和按钮,但没有实际的消息.
它与UIAlertView在屏幕上可用的空间有关,好像我删除了几个按钮然后消息显示正常.
有没有办法强制UIAlertView调整大小以适应?
相关代码在这里
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Free Update",nil)
message:NSLocalizedString(@"There is a new version of this app available in the App Store. Download it now.",nil)
delegate:self
cancelButtonTitle:NSLocalizedString(@"Don't remind me",nil)
otherButtonTitles:NSLocalizedString(@"Download",nil), NSLocalizedString(@"Remind me later", nil), nil];
[alert show];
[alert release];
Run Code Online (Sandbox Code Playgroud)
这就是结果:

所以假设我有一个NSArray填充了数百个NSDictionary对象.
所有字典对象都具有键的值,name但这些值名称可能在不同对象中出现多次.
我需要能够过滤这个NSArray只返回每个唯一name属性一个对象(无论哪个对象,第一个或最后一个,我不在乎).
这是我有多远,但显然我的filtered数组包含所有对象而不是唯一的对象.
我认为必须有一种方法可以告诉谓词将结果限制为只有一个/第一个匹配?
NSArray *allObjects = ... // This is my array of NSDictionaries
NSArray *uniqueNames = [allObjects valueForKeyPath:@"@distinctUnionOfObjects.name"];
NSArray *filtered = [allObjects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(self.name IN %@)", uniqueNames]];
Run Code Online (Sandbox Code Playgroud)
谢谢!
iphone ×3
objective-c ×3
ios ×2
cocoa-touch ×1
core-data ×1
html-parsing ×1
nsarray ×1
nsdictionary ×1
nsxmlparser ×1
uialertview ×1
uitableview ×1
web-services ×1
xml ×1