mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-04-10 11:23:39 +02:00
ignore negative indexes when using ListMonitor's safeIndex APIs
This commit is contained in:
@@ -117,19 +117,11 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
*/
|
*/
|
||||||
public subscript(safeSectionIndex sectionIndex: Int, safeItemIndex itemIndex: Int) -> T? {
|
public subscript(safeSectionIndex sectionIndex: Int, safeItemIndex itemIndex: Int) -> T? {
|
||||||
|
|
||||||
CoreStore.assert(
|
guard let section = self.sectionInfoAtIndex(safeSectionIndex: sectionIndex) else {
|
||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
|
||||||
)
|
|
||||||
|
|
||||||
guard let sections = self.fetchedResultsController.sections
|
return nil
|
||||||
where sectionIndex < sections.count else {
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
guard itemIndex >= 0 && itemIndex < section.numberOfObjects else {
|
||||||
let section = sections[sectionIndex]
|
|
||||||
guard itemIndex < section.numberOfObjects else {
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -148,7 +140,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
!self.isPendingRefetch || NSThread.isMainThread(),
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.fetchedResultsController.objectAtIndexPath(indexPath) as! T
|
return self.fetchedResultsController.objectAtIndexPath(indexPath) as! T
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,7 +192,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
!self.isPendingRefetch || NSThread.isMainThread(),
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
||||||
)
|
)
|
||||||
|
|
||||||
return (self.fetchedResultsController.fetchedObjects as? [T]) ?? []
|
return (self.fetchedResultsController.fetchedObjects as? [T]) ?? []
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,12 +204,7 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
@warn_unused_result
|
@warn_unused_result
|
||||||
public func objectsInSection(section: Int) -> [T] {
|
public func objectsInSection(section: Int) -> [T] {
|
||||||
|
|
||||||
CoreStore.assert(
|
return (self.sectionInfoAtIndex(section).objects as? [T]) ?? []
|
||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
|
||||||
)
|
|
||||||
|
|
||||||
return (self.fetchedResultsController.sections?[section].objects as? [T]) ?? []
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -231,12 +216,7 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
@warn_unused_result
|
@warn_unused_result
|
||||||
public func objectsInSection(safeSectionIndex section: Int) -> [T]? {
|
public func objectsInSection(safeSectionIndex section: Int) -> [T]? {
|
||||||
|
|
||||||
CoreStore.assert(
|
return (self.sectionInfoAtIndex(safeSectionIndex: section)?.objects as? [T]) ?? []
|
||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
|
||||||
)
|
|
||||||
|
|
||||||
return (self.fetchedResultsController.sections?[section].objects as? [T]) ?? []
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -251,7 +231,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
!self.isPendingRefetch || NSThread.isMainThread(),
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.fetchedResultsController.sections?.count ?? 0
|
return self.fetchedResultsController.sections?.count ?? 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,7 +246,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
!self.isPendingRefetch || NSThread.isMainThread(),
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.fetchedResultsController.fetchedObjects?.count ?? 0
|
return self.fetchedResultsController.fetchedObjects?.count ?? 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -308,7 +286,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
!self.isPendingRefetch || NSThread.isMainThread(),
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.fetchedResultsController.sections![section]
|
return self.fetchedResultsController.sections![section]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -325,13 +302,15 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
!self.isPendingRefetch || NSThread.isMainThread(),
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
||||||
)
|
)
|
||||||
|
guard section >= 0 else {
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
guard let sections = self.fetchedResultsController.sections
|
guard let sections = self.fetchedResultsController.sections
|
||||||
where section < sections.count else {
|
where section < sections.count else {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return sections[section]
|
return sections[section]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -347,7 +326,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
!self.isPendingRefetch || NSThread.isMainThread(),
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.fetchedResultsController.sections ?? []
|
return self.fetchedResultsController.sections ?? []
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -365,7 +343,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
!self.isPendingRefetch || NSThread.isMainThread(),
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.fetchedResultsController.sectionForSectionIndexTitle(title, atIndex: index)
|
return self.fetchedResultsController.sectionForSectionIndexTitle(title, atIndex: index)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,7 +358,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
!self.isPendingRefetch || NSThread.isMainThread(),
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.fetchedResultsController.sectionIndexTitles
|
return self.fetchedResultsController.sectionIndexTitles
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -398,7 +374,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
!self.isPendingRefetch || NSThread.isMainThread(),
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
||||||
)
|
)
|
||||||
|
|
||||||
return (self.fetchedResultsController.fetchedObjects as? [T] ?? []).indexOf(object)
|
return (self.fetchedResultsController.fetchedObjects as? [T] ?? []).indexOf(object)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -415,7 +390,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
!self.isPendingRefetch || NSThread.isMainThread(),
|
!self.isPendingRefetch || NSThread.isMainThread(),
|
||||||
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
"Attempted to access a \(typeName(self)) outside the main thread while a refetch is in progress."
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.fetchedResultsController.indexPathForObject(object)
|
return self.fetchedResultsController.indexPathForObject(object)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -439,7 +413,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
NSThread.isMainThread(),
|
NSThread.isMainThread(),
|
||||||
"Attempted to add an observer of type \(typeName(observer)) outside the main thread."
|
"Attempted to add an observer of type \(typeName(observer)) outside the main thread."
|
||||||
)
|
)
|
||||||
|
|
||||||
self.removeObserver(observer)
|
self.removeObserver(observer)
|
||||||
|
|
||||||
self.registerChangeNotification(
|
self.registerChangeNotification(
|
||||||
@@ -513,7 +486,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
NSThread.isMainThread(),
|
NSThread.isMainThread(),
|
||||||
"Attempted to add an observer of type \(typeName(observer)) outside the main thread."
|
"Attempted to add an observer of type \(typeName(observer)) outside the main thread."
|
||||||
)
|
)
|
||||||
|
|
||||||
self.removeObserver(observer)
|
self.removeObserver(observer)
|
||||||
|
|
||||||
self.registerChangeNotification(
|
self.registerChangeNotification(
|
||||||
@@ -657,7 +629,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
NSThread.isMainThread(),
|
NSThread.isMainThread(),
|
||||||
"Attempted to add an observer of type \(typeName(observer)) outside the main thread."
|
"Attempted to add an observer of type \(typeName(observer)) outside the main thread."
|
||||||
)
|
)
|
||||||
|
|
||||||
self.removeObserver(observer)
|
self.removeObserver(observer)
|
||||||
|
|
||||||
self.registerChangeNotification(
|
self.registerChangeNotification(
|
||||||
@@ -832,7 +803,6 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
NSThread.isMainThread(),
|
NSThread.isMainThread(),
|
||||||
"Attempted to remove an observer of type \(typeName(observer)) outside the main thread."
|
"Attempted to remove an observer of type \(typeName(observer)) outside the main thread."
|
||||||
)
|
)
|
||||||
|
|
||||||
let nilValue: AnyObject? = nil
|
let nilValue: AnyObject? = nil
|
||||||
setAssociatedRetainedObject(nilValue, forKey: &self.willChangeListKey, inObject: observer)
|
setAssociatedRetainedObject(nilValue, forKey: &self.willChangeListKey, inObject: observer)
|
||||||
setAssociatedRetainedObject(nilValue, forKey: &self.didChangeListKey, inObject: observer)
|
setAssociatedRetainedObject(nilValue, forKey: &self.didChangeListKey, inObject: observer)
|
||||||
|
|||||||
Reference in New Issue
Block a user