Tag: 单例

正确的创build新对象的方法是在应用程序委托中定义的NSDictionary和NSArray对象的副本

我想知道什么正确的方法是在应用程序委托或单身人士对象中定义一个对象的副本。 总之,我正在制作一个需要用户login的应用程序。 这个login视图只是一个在“真实”应用程序之上的模式视图控制器,它由一个tabbarcontroller和一些tableview控制器组成。 成功login后,向远程服务器发送数据请求,模式视图控制器被解除,显示包含XML数据的TabBar控制器和表视图。 为了parsing传入的数据,我创build了一个名为DataParser的单例对象,它具有接口 … @interface DataParser : NSObject { // Data objects that hold the data obtained from XML files NSMutableDictionary *personnel; NSMutableDictionary *schedule; NSMutableDictionary *today; } @property (nonatomic, retain) NSMutableDictionary *personnel; @property (nonatomic, retain) NSMutableDictionary *schedule; @property (nonatomic, retain) NSMutableDictionary *today; … 现在,在这些字典中,我存储(可变的)字典和数组,其中包含了parsingXML数据的NSString对象。 由于我不想修改这些原始的对象来保存parsing的数据(也就是说,我只想在login阶段修改它们,而不是在任何的tableview控制器中修改),我正在创build一个新的字典对象,每个tableview控制器上面的一个字典的内容的副本。 所以例如,在一个名为ScheduleViewController的视图控制器的loadView中,我有 … @interface ScheduleViewController : UITableViewController { NSDictionary […]

核心数据上下文和单身数据控制器

我有一个单身数据控制器来保存一个对象的数组。 看看我的解决scheme香蕉问题: singelton dataController banansArray 现在我想将香蕉arrays保存到持久状态。 这个核心数据教程: 核心数据存储图像使我对Core Data有了很好的总体理解,在将我的数据Controller更改为singleton之前,我可以将它包含在我的应用程序中。 现在什么是最好的? 我是否需要将生成的核心数据堆栈在应用程序委托内移动到pipe理香蕉数组的单一数据控制器? 或者,我必须像使用Core Data模板生成的Master-View控制器那样在应用程序委托中设置单例的上下文? 在那种情况下,我如何在appDelegate中设置上下文? 这在AppDelegate应用程序didFinishLaunchingWithOptions:不起作用(它适用于模板中的masterView) didFinishLaunchingWithOptions: DataControllerSingleton *dataController; dataController.managedObjectContext = self.managedObjectContext; 在提供的beerDataModel示例中,ManagedObjectCode是: if (_mainContext == nil) { _mainContext = [[NSManagedObjectContext alloc] init]; _mainContext.persistentStoreCoordinator = [self persistentStoreCoordinator]; }

单身人士导致应用程序在更改视图控制器时崩溃

我正在尝试使用单例类来select基于用户所做的select显示的自定义内容。 它是这样的:显示一个列表,用户从列表中select一行,然后应用程序进入另一个ViewController视图。 所使用的ViewController对于所有列表选项都是相同的,但内容是不同的。 目前我设法做到这一点只有一个选项,并试图使用单身类告诉应用程序可以select哪些内容。 当select“莱佛士着陆点”选项时会发生这种情况: if(landmarkSelected== @"Raffles Landing Site") { RafflesLandmarkInfo *rafflesLandmarkInfo = [[RafflesLandmarkInfo alloc] initWithNibName:@"RafflesLandmarkInfo" bundle:nil]; [self.navigationController pushViewController:rafflesLandmarkInfo animated:YES]; [rafflesLandmarkInfo release]; 这将打开一个UIWebView实现,如下所示: [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"raffles" ofType:@"html"]isDirectory:NO]]]; 我创build了一个单例类,如下所示: http : //www.galloway.me.uk/tutorials/singleton-classes/ 我添加了一个NSMutableString属性,并将以前的代码更改为以下代码: if(landmarkSelected== @"Raffles Landing Site") { LandmarkController* instance = [LandmarkController sharedInstance]; [instance.activeLandmark setString:@"raffles"]; RafflesLandmarkInfo *rafflesLandmarkInfo = [[RafflesLandmarkInfo alloc] initWithNibName:@"RafflesLandmarkInfo" bundle:nil]; [self.navigationController […]

在单例类(ARC)中使用MKReverseGeocoder

我正在尝试为天气function(全部包含)创build单例类,以便我可以在单个分配的对象中更改/更新/调用整个应用程序中的天气数据。 我有它的工作,除了一个小奇怪的错误。 我在运行iOS <5的设备上使用MKReverseGeocoder。CLGeocoder在iOS 5+上运行良好。 基本上,这是在应用程序中发生的事情: 在应用程序委托中,在启动时,我创build了我的天气单件的共享实例。 除非有UIView需要报告天气结果,否则这个实例什么也不做。 当加载报告天气的视图时,如果该位置尚未在首选项中静态设置,则该应用会尝试拉取当前位置。 这工作,我可以logging设备的当前位置的坐标。 在完成之后,我立即进入试图扭转这些坐标的地理定位。 方法MKReverseGeocoder开始得到执行,我可以logging该实例的isQuerying属性是真实的,所以我知道它正试图地理定位的coords。 (是的,我将代理设置为我的共享实例,实例的types为MKReverseGeocoderDelegate)。 现在这是奇怪的部分。 如果我第一次启动应用程序,并且第一次向屏幕添加天气UIView,则MKReverseGeocoder将启动,但不会调用委托方法。 如果我然后closures应用程序并再次打开它(第二次),当前的位置获取的查找,MKReverseGeocoder调用委托方法和一切工作。 它只是不想在第一次启动时工作,无论我多次调用它(我有一个可以启动查找的button)。 这完全是莫名其妙的 iOS 5 CLGeocoder在初次启动以及随后的每次启动时均可正常工作。 MKReverseGeocoder在初次启动时不起作用(因为它不调用委托方法),但是在后续的启动中。 以下是相关的代码: -(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error{ NSLog(@"error getting location:%@", error); self.reverseGeocoder = nil; [[NSNotificationCenter defaultCenter] postNotificationName:@"errorGettingLocation" object:nil userInfo:[NSDictionary dictionaryWithObject:error forKey:@"error"]]; } – (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)pm { //update placemark and get weather from correct […]

Xcode / Swift错误:命令由于信号失败:分段错误:11

我想用完成处理程序参数调用一个单例类的函数,但我得到“命令失败,由于信号:分段错误:11”错误。 我正在使用Xcode 6.2(6C101),并尝试在iPhone 6模拟器上为iOS 8构build。 这是一个单人class: public class ClientManager { public class var sharedInstance: ClientManager { struct Singleton { static let instance = ClientManager() } return Singleton.instance } private init() { } public func fetchServiceInfo(serviceName: String, completionHandler: (JSON?, NSError?) -> Void) { Alamofire.request(.GET, Router.ServiceInfo(serviceName)).responseJSON { (req, res, json, error) in completionHandler(JSON(json!), error) } } } […]

是否需要引用一个单例目标-c对象,以便通过IOS应用程序的生命来保存它?

是否需要引用一个单例目标-c对象,以便通过IOS应用程序的生命来保存它? 例如,如果如果AppDelegate创build/实例化了一个单例对象,但没有保留它,这个实例(带有实例variables数据)是否可以在iPhone应用程序中使用? 换句话说,为了确保单例中的数据保持不变,在最初创build的App Delegate中,App Delegate是否需要将它保留到它的一个实例variables中?

自我毁灭单身devise模式iOS

我最近遇到了一个问题,我只想要一个特定对象的实例存在,只存在一个短暂的时间内执行特定的操作。 它的操作是asynchronous的,所以如果我没有引用它,ARC会在运行循环结束时将其解除分配。 如果我坚持下去,我会需要委托callback或通知来知道什么时候发布它。 该对象需要下载几个图像和其他数据并将其caching到磁盘。 我不希望它浪费内存,因为caching限制大约是24小时。 我也不需要任何反馈; 我希望它能够完成它的任务,并且自己完成。 我想出了一个我很喜欢的devise模式。 从那时起,我就在其他一些项目中使用过它,并且如果它是一个众所周知和分析的模式,我只是不知道(自毁单身)。 我想知道,所以我可以意识到我目前没有看到任何潜在的陷阱。 我也很感兴趣,听到你们可能有什么关于为什么这是一个糟糕的devise的input。 devise就像这样(这是ARC,但如果通过类方法释放单例,非弧也可以工作): 一个全局的静态对象(不是真正的单身人士,因为它不是整个时间) static MySelfDestructingClass* singleton; 单一的公共类方法 + (void)downloadAndCacheDataIfNeeded { //Force synchronized access @synchronized(singleton){ //We are already doing something, return if(singleton){ return; } NSDate* lastCacheDate = [[NSUserDefaults standardDefaults] objectForKey:kKeyForLastUpdate]; if([[NSDate date] timeIntervalSinceDate:lastCacheDate] > kCacheLimit){ //Our cache is out of date, we need to update singleton […]

用于位置更新多个视图的单身人士

我想在任何视图中按下导航栏中的定位button之后,在所有视图中更新用户位置。 我已经开始创build一个单身人士。 Location.h #import <Foundation/Foundation.h> #import <CoreLocation/CoreLocation.h> #import <MapKit/MapKit.h> @interface Location : NSObject <CLLocationManagerDelegate> @property (nonatomic, strong) CLLocationManager* locationManager; + (Location*)sharedSingleton; @end Location.m #import "Location.h" @implementation Location { CLLocationManager *locationManager; CLGeocoder *geocoder; CLPlacemark *placemark; } @synthesize locationManager; – (id)init { self = [super init]; if(self) { self.locationManager = [CLLocationManager new]; [self.locationManager setDelegate:self]; [self.locationManager setDistanceFilter:kCLDistanceFilterNone]; [self.locationManager […]

如何保持内存中的variables,直到应用程序退出

我在iOS中有一个单例对象,在实例化时parsing一个CSV文件,然后保存结果。 我想使这个对象普遍可访问,我希望它不会从内存中释放,直到应用程序退出。 我正在运行ARC,所以我不能手动保留。 有没有办法可以做到这一点,所以它会与ARC工作? 头文件: #import <Foundation/Foundation.h> #import "CHCSV.h" #import "RCParserObject.h" @interface ParserStore : NSObject <CHCSVParserDelegate> { // CSV Variables RCParserObject *item; NSMutableArray *data; NSMutableArray *parsedData; int fields; bool open; } @property (atomic, retain) RCParserObject *item; @property (atomic, retain) NSMutableArray *data; @property (atomic, retain) NSMutableArray *parsedData; @property (atomic) int fields; @property (atomic) bool open; + […]

Objective-C – 优化这个单例模式?

我发现网上的单身模式。 在我看来,它有很多可以优化的东西。 在sharedMySingleton方法中,不需要调用retain? 我不确定… – 如果不是,为什么在allocWithZone有一个保留? – 什么是@synchronized的使用。 NSAssert认为块可以被调用多次,所以如果是的话,应该有更多的代码释放以前的内存,或者没有NSAsserting清除退出块,如果没有,为什么有这个NSAssert? – 链接sharedMySingleton和sharedMySingleton似乎很奇怪。 我写了自己的东西: +(MySingleton*)sharedMySingleton { @synchronized([MySingleton class]) { if (_sharedMySingleton == nil) _sharedMySingleton = [[self alloc] init]; return _sharedMySingleton; } return nil; } +(id)alloc { @synchronized([MySingleton class]) { return [super alloc]; } return nil; } 单身模式 #import "MySingleton.h" @implementation MySingleton // ########################################################################################################## // ######################################## SINGLETON PART […]