Tag: Objective C

在快速枚举期间将对象设置为nil

我想通过数组枚举一个对象为’nil’,如下所示: for(Object* object in array){ object = nil; } 然后Xcode告诉我’默认情况下,不能在ARC中修改快速枚举变量; 声明变量__strong以允许这个。 这意味着这样做: for(Object __strong* object in array){ object = nil; } 这似乎是多余的。 据我了解,声明对对象的强引用会使其保留计数增加1,而将其保留计数减少1。 那么,如何在枚举数组的同时将对象设置为nil ? 我正在使用ARC。

UIButton触及IBAction导致EXC_BAD_ACCESS与ARC

StackOverflow上有一些问题,用户遇到了与我相同的问题。 但是,他们的解决方案都不适合我的情况。 (看到这里 , 这里 , 这里和这里有一些我读过的SO问题,但是没有找到帮助。) 在我的例子中,我有一个NIB,它有一对UIButton ,带有一个相关的Controller View。 该视图对我的项目来说相对较旧,直到今天我才能毫无困难地使用这些按钮。 在进行了一些与按钮行为无关的代码更改后,我遇到了一个错误,它崩溃了应用程序,破坏了main()函数中的代码,每当我触摸任何按钮时都会给出一条EXC_BAD_ACCESS错误消息在我的视图上。 这种情况如何或为何会发生? 我实际上已经注释掉了几乎所有的function代码,特别是我今天早些时候修改过的function代码,但仍然无法阻止错误的发生。 我的项目正在使用自动引用计数,我之前没有看到过这个错误。 此外,我没有修改NIB,也没有修改与按钮相关的IBAction ,因此我没有看到会导致这种情况的原因。 停止错误的唯一方法是将我的NIB中的UIButton取消链接到我的Controller View头文件中定义的IBAction方法。 我的用例唯一的“独特”方面是我在另一个子视图控制器中加载了该视图的一个或两个实例。 加载的断开视图的实例数取决于数组中的对象数。 下面是我用来实例化这些视图并将其作为另一个视图的子视图加载的代码。 //Called else where, this starts the process by creating a view that //will load the problematic view as a sub-view either once or twice. – (id)initWithPrimarySystemView:(SystemViewController *)svc { //First we create our parent, […]

有没有办法使用NSString stringByFoldingWithOptions将单个法语”’字符展开为’oe’?

对于与变音符号无关的全文搜索function,我使用以下代码将é或Ö等重音字符转换为小写的非重音formse和o [[inputString stringByFoldingWithOptions: NSCaseInsensitiveSearch + NSDiacriticInsensitiveSearch + NSWidthInsensitiveSearch locale: [NSLocale currentLocale]] lowercaseString]; 这很有效。 但是,我发现无法转换基本forms由多个字符组成的特殊字符,如法语œ (如“sœur”)或德语ß (如’Fluß’)。 我想分别将它们转换为oe和ss 。 我没有找到stringByFoldingWithOptions的标志,也没有在网上找到任何东西。 编辑 ß实际上是通过上面的代码正确处理的。 它转换为ss 。

更改子视图后,UIScrollView不遵守minimumZoomScale

我正在遇到一个问题,让UIScrollView正确更新以响应最小缩放比例的变化。 scrollview有一个UIImageView作为子视图,UIImageView的image属性是为响应UIPickerView的didFinishPickingMediaWithInfo方法而设置的: – (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *takenImage = [info objectForKey:UIImagePickerControllerOriginalImage]; [self.imageView setImage:takenImage]; [self.imageView setFrame:CGRectMake(self.imageView.frame.origin.x, self.imageView.frame.origin.y, takenImage.size.width, takenImage.size.height)]; [self.scrollView setContentSize:CGSizeMake(takenImage.size.width, takenImage.size.height)]; [self.scrollView setMinimumZoomScale:[self.scrollView frame].size.width / takenImage.size.width]; [self.scrollView setMaximumZoomScale:2.0]; [self.scrollView setZoomScale:[self.scrollView minimumZoomScale] animated:YES]; [self dismissModalViewControllerAnimated:YES]; } 这在第一次使用此方法添加图像时正常工作。 但是,如果再次触发此方法 – 即使添加与第一次相同的图像 – 后续图像在scrollView中以完整大小显示,并且无法缩小 – 仅放大。 我已将minimumZoomScale的contentSize , zoomScale , minimumZoomScale和maximumZoomScale转储到日志中,每次都是相同的。 minimumZoomScale都正确计算minimumZoomScale 。 就像使用minimumZoomScale 1.0重新绘制minimumZoomScale ,忽略了它已被显式设置的事实。 […]

持久存储的核心数据错误

我正在尝试使用Core Data从模型加载简单数据并将其放入表视图中。 以下是我的持久存储的以下代码: //AppDelegate.m – (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (__persistentStoreCoordinator != nil) { return __persistentStoreCoordinator; } NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@”vofasmmmnmgd.sqlite”]; if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path]]) { NSURL *preloadURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@”CoreDataSQLite” ofType:@”sqlite”]]; NSError* err = nil; if (![[NSFileManager defaultManager] copyItemAtURL:preloadURL toURL:storeURL error:&err]) { NSLog(@”Oops, could copy preloaded data”); } } NSError […]

在地图上的给定点之间绘制折线

我正在实现一个iOS应用程序,我想在地图上的几个给定坐标之间绘制折线。 我编写了代码并从我的观点得到了折线,达到了无限的一点。 换句话说,该行的起点从我给定的纬度和长点开始,但该行的结尾是无限的,而不是另一个点。 这是我的代码…… 我在一个名为routeLatitudes的NSMutableArray填充了坐标。 arrays单元被填充一个用于纬度,一个用于经度。 MKMapPoint* pointArr = malloc(sizeof(CLLocationCoordinate2D) * [routeLatitudes count]); for(int idx = 0; idx < [routeLatitudes count]; idx=idx+2) { CLLocationCoordinate2D workingCoordinate; workingCoordinate.latitude=[[routeLatitudes objectAtIndex:idx] doubleValue]; workingCoordinate.longitude=[[routeLatitudes objectAtIndex:idx+1] doubleValue]; MKMapPoint point = MKMapPointForCoordinate(workingCoordinate); pointArr[idx] = point; } // create the polyline based on the array of points. routeLine = [MKPolyline polylineWithPoints:pointArr count:[routeLatitudes count]]; […]

将NSMutableArray复制到GLES渲染的浮点数组中

我有一个名为mVerticies的NSMutableArray存储为我的类的成员,我想将它们放入一个float数组中,用glVertexAttribPointer绘制它们。 通常在绘图时,我会有类似的东西: float verticies[] = {-1, -1, 1, -1}; // … prepare to draw glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, verticies); // … draw 但是为了使用glVertexAttribPointer函数,我需要一个float []。 verticies存储为NSMutableArray,因为它们经常更改。 是否有一种简单的方法可以将动态float []存储为成员,或者将NSMutableArray快速转换为float []?

Objective C – respondsToSelector用于动态属性

我目前正面临检查对象(NSManagedObject)的属性是否存在的问题。 不幸的是方法 [[MyObject class] respondsToSelector:@selector(myProperty)]; 总是返回NO。 我认为这是因为CoreData生成的属性是一个新的样式属性ala @property (nonatomic, strong) NSString *myProperty 那么任何想法如何解决这个问题? 我非常感谢你的所有建议;) 提前致谢! 亚历克斯

使用块会导致EXC_BAD_ACCESS

我想使用块,但在几次调用后它会导致我EXC_BAD_ACCESS。 我的代码: – (void) sendBasket { if (currentSendToBasketBlock != nil) { // there’s already a webservice going… set the new one as waiting waitingSendToBasketBlock = ^ { WebServicesModel *webServicesModel = [[[WebServicesModel alloc] init] autorelease]; webServicesModel.delegate = self; [webServicesModel sendBasketToServer:currentBasket]; [self showBasketBackground]; }; [waitingSendToBasketBlock copy]; } else { currentSendToBasketBlock = ^ { WebServicesModel *webServicesModel = [[[WebServicesModel […]

UISearchBar搜索两个数组

我有一个搜索数组搜索栏,并用结果更新UITableView。 表格视图是书籍列表,包括标题和作者: 现在,搜索栏只搜索标题,但我想让它搜索作者。 这是我的搜索代码(我从http://blog.webscale.co.in/?p=228获得 )。 – (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { [tableData removeAllObjects];// remove all data that belongs to previous search if([searchText isEqualToString:@””]||searchText==nil){ [tableView reloadData]; return; } for(NSString *name in dataSource){ NSInteger counter = 0; //NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; NSRange r = [[name lowercaseString] rangeOfString:[searchText lowercaseString]]; if(r.location != NSNotFound) [tableData addObject:name]; counter++; } //[pool […]