我一直试图解决这个崩溃将近一个星期.应用程序崩溃,没有任何异常或堆栈跟踪.在僵尸模式下运行仪器时,应用程序不会以任何方式崩溃.
我有一个在不同的线程上调用的方法.修复崩溃的解决方案正在取代
[self.mutableArray removeAllObjects];
Run Code Online (Sandbox Code Playgroud)
同
dispatch_async(dispatch_get_main_queue(), ^{
[self.searchResult removeAllObjects];
});
Run Code Online (Sandbox Code Playgroud)
我认为这可能是一个时间问题,所以我尝试同步它,但它仍然崩溃:
@synchronized(self)
{
[self.searchResult removeAllObjects];
}
Run Code Online (Sandbox Code Playgroud)
这是代码
- (void)populateItems
{
// Cancel if already exists
[self.searchThread cancel];
self.searchThread = [[NSThread alloc] initWithTarget:self
selector:@selector(populateItemsinBackground)
object:nil];
[self.searchThread start];
}
- (void)populateItemsinBackground
{
@autoreleasepool
{
if ([[NSThread currentThread] isCancelled])
[NSThread exit];
[self.mutableArray removeAllObjects];
// Populate data here into mutable array
for (loop here)
{
if ([[NSThread currentThread] isCancelled])
[NSThread exit];
// Add items to mutableArray
}
}
}
Run Code Online (Sandbox Code Playgroud)
NSMutableArray的这个问题不是线程安全的吗?
我使用类似于以下代码的基于块的枚举:
[[[rows objectForKey:self.company.coaTypeCode] objectForKey:statementType]
enumerateObjectsWithOptions:NSEnumerationConcurrent
usingBlock:^(id coaItem, NSUInteger idx, BOOL *stop) {
// block code here
}]
Run Code Online (Sandbox Code Playgroud)
我想在枚举过程中删除一些对象,具体取决于它们的对象值.
我怎么能这样做?我知道在枚举期间操纵可变数组或字典(NSMutableArray或NSMutableDictionary)通常是不可能的.
实现这个的最佳方法是什么?
谢谢!
objective-c nsmutablearray nsmutabledictionary ios objective-c-blocks
如何从反转中删除对象NSArray.
目前我有一个NSMutableArray,然后我反过来
NSArray* reversedCalEvents = [[calEvents reverseObjectEnumerator] allObjects];
Run Code Online (Sandbox Code Playgroud)
现在我需要从项目中删除reversedCalEvents或calEvents自动刷新数组根据条件显示的表.即
if(someInt == someOtherInt){
remove object at index 0
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我无法让它发挥作用.
我对iOS很陌生,我不知道如何找到像JAVA这样体面的堆栈跟踪,所以我能找到它崩溃的原因是"sigabrt".
我知道它与我刚刚添加的代码有关.
-(void) clearGame {
for (CCSprite *sprite in placedSprites) {
if(sprite == nil) continue;
[self removeChild:sprite cleanup:NO];
[placedSprites removeObject:sprite];
}
placedSprites = [[NSMutableArray alloc] initWithCapacity:1000];
}
Run Code Online (Sandbox Code Playgroud)
我正在添加它的类是cocos2d中的一个层.在它的init方法中,我有
placedSprites = [[NSMutableArray alloc] initWithCapacity:1000];
Run Code Online (Sandbox Code Playgroud)
我不知道什么是错的,所以任何帮助都表示赞赏.
谢谢!
我有一个奇怪的问题,如果我在forin枚举中删除我的项目,它会崩溃,所以像这样:
for (Obstacle *obstacleToTrack in _obstaclesToAnimate) {
//this if else not so important for happening crash
if(obstacleToTrack.distance > 0){
obstacleToTrack.distance -= _playerSpeed * _elapsed;
}else{
if (obstacleToTrack.watchOut) {
obstacleToTrack.watchOut = NO;
}
obstacleToTrack.x -= (_playerSpeed + obstacleToTrack.speed) * _elapsed;
}
if (obstacleToTrack.x < -obstacleToTrack.width || _gameState == GS_OVER) {
[self removeChild:obstacleToTrack];
//this line makes crash happen , if remove this line code work fine
[_obstaclesToAnimate removeObject:obstacleToTrack];
}
}
Run Code Online (Sandbox Code Playgroud)
如果我改变我的代码
NSMutableArray *forRemoving = [[NSMutableArray alloc]init];
for (Obstacle *obstacleToTrack in _obstaclesToAnimate) { …Run Code Online (Sandbox Code Playgroud) Mods:我意识到这是这个问题的重复,你能关闭/删除它吗?
这段代码有什么问题?我明白了
Collection <NSCFArray: 0x101e1b6d0> was mutated while being enumerated
Run Code Online (Sandbox Code Playgroud)
它是NSMutableArray,而不是NSArray
NSMutableArray *set = [[NSMutableArray alloc]initWithObjects:@"first", @"second", @"third", @"third", nil];
[set enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
if([obj isEqualToString:@"third"])
{
[set removeObjectAtIndex:idx];
}
}];
[pool drain];
Run Code Online (Sandbox Code Playgroud)