UIViewController屏幕上的当前需要通过设置徽标视图来响应来自APN的推送通知.但我怎么能得到UIViewControllerin方法application:didReceiveRemoteNotification:AppDelegate.m?
我尝试使用self.window.rootViewController获取当前显示UIViewController,它可能是一种UINavigationViewController或其他类型的视图控制器.我发现可以用来获取屏幕上的visibleViewController属性.但如果它不是,我该怎么办?UINavigationViewControllerUIViewControllerUINavigationViewController
任何帮助表示赞赏!相关代码如下.
AppDelegate.m
...
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
//I would like to find out which view controller is on the screen here.
UIViewController *vc = [(UINavigationViewController *)self.window.rootViewController visibleViewController];
[vc performSelector:@selector(handleThePushNotification:) withObject:userInfo];
}
...
Run Code Online (Sandbox Code Playgroud)
ViewControllerA.m
- (void)handleThePushNotification:(NSDictionary *)userInfo{
//set some badge view here
}
Run Code Online (Sandbox Code Playgroud) 我将Round Rect按钮拖动到右侧Bar Button项的位置,并将图像设置为Round Rect Button.除警告"导航项目中不支持普通样式"外,一切正常.即使我选择条形按钮项的样式为"有边框",警告仍然存在.Xcode 4.2有什么问题?提前致谢!
PS.我使用圆形矩形按钮定制了许多条形按钮项目,有时Xcode 4.2仅显示条形按钮项目上的一个警告,有时显示所有条形按钮项目的警告.
是否可以动态获取键盘的框架,实际上是它的高度?因为我有一个UITextView并且我想根据键盘框架高度调整其高度,当键盘的输入方法改变时.如您所知,不同的输入方法可能具有不同的键盘框架高度.
当我尝试在iOS7中模拟具有翻转水平过渡的视图控制器时,导航栏的原点在开始时为(0,0),然后在(0,20)处跳转到右侧位置.是否有可能使其在iOS6中表现相同?您可以在此处下载该项目.
我创建了一个自定义导航栏,如下所示:
@implementation MyCustomNavigationBar
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
UIImage *image = [UIImage imageNamed:@"Custom-Nav-Bar-BG.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
if (IOSVersion <7) {
}else{
self.translucent = NO;
self.tintColor = [UIColor whiteColor];
self.barStyle = UIBarStyleDefault;
self.barTintColor = [UIColor redColor];
}
}
@end
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
有一个数组,每个元素都是一个NSDictionary.
NSMutableArray *mutArr = [NSMutableArray array];
for (Person *person in persons) {
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:person.name, @"name", person.email, @"email", nil];
[mutArr addObject:dict];
}
self.arr = [[NSArray alloc] initWithArray:mutArr];
Run Code Online (Sandbox Code Playgroud)
如何通过使用方法使用arr名称或电子邮件文件管理包含字符串.@"filter string"filterArrayUsingPredicate:
提前致谢!
我想为我的项目创建一个BaseViewController类(继承自UIViewController),它可以作为我项目中其他视图控制器的基类.这是为了添加诸如常见进度HUD,刷新按钮和网络更新机制之类的东西,也许是可以通过每个子类自定义文本的错误对话框等.
至关重要的是,我希望能够将这个功能添加到UIViewController子类和UITableViewController子类中,但是我无法将自己插入到UITableViewController类层次结构中,因此我需要a BaseUIViewController和a BaseUITableViewController,但如果我这样做,我必须实现两次更改并保持同步.
对于必须可以访问BaseViewController子类和BaseTableViewController子类的公共代码,单个位置的最佳方法是什么?我只想在我的代码中有一个地方,我将不得不处理常见的任务.
1)我曾考虑使用带关联引用的类别,但问题是我需要自定义ViewController生命周期类的实现,例如viewDidLoad:,这不是一个好主意.
2)我可以UITableViewController完全跳过,并BaseTableViewController从BaseViewController 构建我自己的,自己实现tableView delegate&datasource方法,但我不太喜欢在这里跳过apple的控制器实现.
3)我可以BaseViewController继承UIViewController,BaseTableViewController继承UITableViewController,并将自定义方法调用放入ViewControllerBaseMethods可以从两个"Base"文件调用的第三个文件中.可能仍然存在重复的属性,但至少方法代码将在一个地方.
对于这种类型的东西还有其他任何好方法吗?
注释引脚是可拖动的,但我无法将其放到目标位置.问题是如何获取目标位置的坐标,我放下注释引脚?有任何方法吗?
编辑1:
注释引脚的中心似乎永远不会改变我放下引脚的地方.
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState
fromOldState:(MKAnnotationViewDragState)oldState
{
if (newState == MKAnnotationViewDragStateEnding)
{
NSLog(@"x is %f", annotationView.center.x);
NSLog(@"y is %f", annotationView.center.y);
CGPoint dropPoint = CGPointMake(annotationView.center.x, annotationView.center.y);
CLLocationCoordinate2D newCoordinate = [self.mapView convertPoint:dropPoint toCoordinateFromView:annotationView.superview];
[annotationView.annotation setCoordinate:newCoordinate];
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:
Annotation.h
@property (nonatomic,readwrite,assign) CLLocationCoordinate2D coordinate;
Run Code Online (Sandbox Code Playgroud)
Annotation.m
- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate {
coordinate = newCoordinate;
}
Run Code Online (Sandbox Code Playgroud)
编辑3: 我在哪里拖动引脚,掉落的NSLog输出总是相同的.
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState
fromOldState:(MKAnnotationViewDragState)oldState
{
if (newState == MKAnnotationViewDragStateEnding)
{
CLLocationCoordinate2D droppedAt = annotationView.annotation.coordinate;
NSLog(@"Pin dropped at %f,%f", droppedAt.latitude, droppedAt.longitude);
}
} …Run Code Online (Sandbox Code Playgroud) 我在Apple的文档"使用块"中找到了定义块的语法,该块返回乘以两个值的结果:
double (^multiplyTwoValues)(double, double);
Run Code Online (Sandbox Code Playgroud)
不同于定义一个块,该块将另一个块作为参数并返回另一个块:
void (^(^complexBlock)(void (^)(void)))(void);
Run Code Online (Sandbox Code Playgroud)
为什么第二种语法不是void (^)(void)(^complexBlock)(void (^)(void))?
有两个实体:作者和书.作者有一个属性authorName和一个to-many关系书.本书有几个属性和一个关系作者.有一个视图控制器(VCAuthor)来编辑Author对象.子视图控制器(VCBook)用于编辑作者的书籍.只有一个managedobjectcontext.在VCBook类中,我将undomanager分组如下
-(void)viewDidLoad
{
NSUndoManager *anUndoManager = [[NSUndoManager alloc] init];
[self.book.managedObjectContext setUndoManager:anUndoManager];
[anUndoManager release];
[self.book.managedObjectContext.undoManager beginUndoGrouping];
}
-(void)cancelAction:(id)sender
{
NSLog(@"%@", self.author.authorName);
[self.book.managedObjectContext.undoManager endUndoGrouping];
[self.book.managedObjectContext.undoManager undoNestedGroup];
self.book.managedObjectContext.undoManager = nil;
NSLog(@"%@", self.author.authorName);
[self dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
cancelAction链接到VCBook上的取消按钮,用于撤消VCBook中所做的所有更改.
问题在于:首先,在VCAuthor中,我在UITextfiled authorNameTextField中编辑从奥巴马到大奥巴马的authorName,并通过author.authorName = authorNameTextField.text将其保存到MOC中 - (void)viewWillDisappear:(BOOL)animated {} 方法.然后我进入子视图控制器VCBook编辑作者的书籍,然后单击取消按钮返回到VCAuthor.我发现authorName仍然是奥巴马,这意味着authorName的预期更改已被撤消.authorName的更改根本不在撤消组中,为什么会发生这种情况?PS.当我回到VCAuthor时,我重新加载数据.我只是NSLog在撤消之前和之后的authorName.撤消之前,authorName是改变后的大奥巴马,并在撤消之后成为奥巴马
在我的应用程序中,Crashlytics用于收集用户的崩溃报告.这是来自用户的一个崩溃报告.它可能取决于用户的联系信息.我无法重建崩溃,因为我不知道他/她的联系人是什么.有没有人对这种情况有所了解?
com.apple.root.default-priority Crashed
0 CoreFoundation CFStringCreateCopy + 13
1 AppSupport CPSqliteDatabaseCreateWithPath + 36
2 AppSupport CPSqliteDatabaseCreateWithPath + 36
3 AppSupport CPRecordStoreGetDatabase + 16
4 AppSupport _getReaderConnection + 10
5 AppSupport CPRecordStoreProcessQueryWithBindBlock + 22
6 AppSupport CPRecordStoreCopyAllInstancesOfClassWhereWithBindBlock + 98
7 AddressBook ABCCopyArrayOfAllPeopleInSourceWithSortOrdering + 244
8 SeeYouKee PhoneNumberInputViewController.m line 538-[PhoneNumberInputViewController dofetchContacts:]
9 AddressBook __37-[ABTCC accessRequestWithCompletion:]_block_invoke_0 + 26
10 TCC __TCCAccessRequest_block_invoke_038 + 316
11 ... libxpc.dylib _xpc_connection_call_reply + 26
12 libdispatch.dylib _dispatch_root_queue_drain + 278
13 libdispatch.dylib _dispatch_worker_thread2 + 92
14 libsystem_c.dylib _pthread_wqthread + …Run Code Online (Sandbox Code Playgroud) ios ×8
iphone ×6
objective-c ×2
cocoa-touch ×1
core-data ×1
declaration ×1
draggable ×1
ios7 ×1
keyboard ×1
mkannotation ×1
nsarray ×1
nspredicate ×1
syntax ×1
uitextview ×1
xcode ×1