Skip to content

Instantly share code, notes, and snippets.

View fpillet's full-sized avatar

Florent Pillet fpillet

View GitHub Profile
@fpillet
fpillet / NSManagedObjectContext+FP.m
Created December 20, 2010 11:30
Core data helpers to log errors and changes to a context (using NSLogger)
- (void)logDetailedError:(NSError *)error from:(id)caller selector:(SEL)selector
{
#if DEBUG
LogMessage(@"coredata", 0, @"*** CORE DATA ERROR: a data store operation failed");
LogMessage(@"coredata", 0, @"*** Caller was: %@ %p %@", [caller class], caller, NSStringFromSelector(selector));
LogMessage(@"coredata", 0, @"*** Error: %@", [error localizedDescription]);
NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey];
if ([detailedErrors count] > 0)
{
for(NSError* detailedError in detailedErrors)
@fpillet
fpillet / NSLoggerMacros.h
Created December 2, 2010 16:50
NSLogger example macros
// Example macros that you can leave in production code, and turn on a flag to activate logging
#import "LoggerClient.h"
extern BOOL gLoggingEnabled;
#define LOG_APP(...) if (gLoggingEnabled) LogMessageF(__FILE__,__LINE__,__FUNCTION__,@"app", ##__VA_ARGS__); else do {} while(0)
#define LOG_CACHE(...) if (gLoggingEnabled) LogMessageF(__FILE__,__LINE__,__FUNCTION__,@"cache", ##__VA_ARGS__); else do {} while(0)
#define LOG_XML_PARSING(...) if (gLoggingEnabled) LogMessageF(__FILE__,__LINE__,__FUNCTION__,@"xml", ##__VA_ARGS__); else do {} while(0)
#define LOG_SOUNDS(...) if (gLoggingEnabled) LogMessageF(__FILE__,__LINE__,__FUNCTION__,@"sounds", ##__VA_ARGS__); else do {} while(0)
@fpillet
fpillet / gist:717759
Created November 27, 2010 10:01
@_Kolin: remove duplicates without using a set
// If you really want to do this without using a set, you can do it this way
NSUInteger count = [marray count];
for (NSUInteger i = 0; i < (count-1); i++) {
[marray removeObjectIdenticalTo:[marray objectAtIndex:i] inRange:NSMakeRange(i+1, count-i-1);
count = [marray count];
}
@fpillet
fpillet / gist:270266
Created January 6, 2010 13:18
A UIViewController subclass which automagically releases its UIView-derived instance variables upon -dealloc and -viewDidUnload
/* Base UIViewController subclass for your iPhone applications which automatically
* releases your instance variables pointing to UIView objects or UIView-subclassed objects,
* limiting the work you have to do in -dealloc and -viewDidUnload
*
* All you have to do is make your UIViewController subclasses inherit from BaseUIViewController
* instead of UIViewController
*
* The helper function that disposes of objects is generalized and can be used for other
* types of objects as well.
*
@fpillet
fpillet / RACSignal+FPOperations.h
Last active August 29, 2015 14:15
Two RACSignal operations I use that are not in the main ReactiveCocoa distribution
//
// Created by Florent Pillet on 30/01/15.
//
#import <Foundation/Foundation.h>
@interface RACSignal (FPOperations)
/// Delivers the receiver's latest `next`s with a minimum of `interval`
/// seconds between two values. Of `next` values produced by the receiver
dispatch_once_t once;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
dispatch_once(&once, ^{
NSLog(@"one");
dispatch_async(dispatch_get_main_queue(), ^{
once = 0;
dispatch_once(&once, ^{
NSLog(@"two");
@fpillet
fpillet / ViewModelServices.m
Created October 22, 2014 16:35
Chaining VCs from ViewModels
- (void)pushViewModel:(BaseViewModel *)nextViewModel
{
NSString *from = [self standardNameFromViewModel:_currentViewController.viewModel];
NSString *to = [self standardNameFromViewModel:nextViewModel];
// We are going to try and find a segue to go to the next viewModel. The way segues are named
// in our storyboard should be: FromModel::ToModel
// 1. try Segue method. For example, a segue going from WelcomeViewController to LoginViewController would be named "Welcome::Login"
// 2. If a segue is not found, try to instantiate the view controller and push it directly. We look up the view controller by its stripped model name (i.e. "WelcomeViewModel" -> "Welcome")
// 3. If the view controller is not found in the storyboard, try a XIB with the stripped model name.